sql - 在 SQL 中将字符串转换为日期
问题描述
我正在使用 SQL Server 2017。我正在尝试处理来自自由格式字段的字符串,并将它们转换为“dd/mm/yyyy”格式的日期,或者如果它们不是这种格式,则只需逐字显示文本.
我需要在 VIEW 中使用它,所以不能使用 SET LANGUAGE。听起来很简单Convert
,IsDate
但似乎不起作用。
因此,对于下面的代码片段(请记住,这将在视图中),我想阅读文本,如果字符串转换为日期(即在格式中,dd/mm/yyyy
则运行转换为我需要的日期) Excel 要获取的日期格式(通过 Connect SQL Server 数据库),如果它没有转换为日期,则按原样显示文本。
create table dateTest1
(
idx int,
dateStringTest varchar(15)
);
insert into dateTest1 (idx, dateStringTest)
values (1, '13/01/2021'), (2, 'no');
select
case
when isdate(convert(datetime, dateStringTest, 103)) = 1
then convert(datetime, dateStringTest, 103)
else dateStringTest
end as dtres
from
dateTest1
--where idx = 1
错误:
消息 241,级别 16,状态 1,第 15 行
从字符串转换日期和/或时间时转换失败。
idx = 2 会发生此错误。Idx = 1 可以正常工作。
对此的任何帮助将不胜感激。提前致谢。
解决方案
您需要将结果日期转换为varchar
. Acase expression
只能返回一种数据类型,并且优先顺序意味着它仍在尝试将 varchar 值转换为datetime
select
case when isdate( dateStringTest) = 1
then Cast(convert(datetime, dateStringTest, 103) as varchar(10))
else dateStringTest
end as dtres
from dateTest1
您可以压缩成单个语句(适用相同的优先顺序)
select IsNull(Cast(Convert(datetime,Try_Cast(dateStringTest as date),103) as varchar(10)),dateStringTest)
from datetest1