Sql 如果case语句中为null,则将datetime转换为字符串“pending”
在我的视图设置中更改我的一列时,我有一个问题:Sql 如果case语句中为null,则将datetime转换为字符串“pending”,sql,datetime,type-conversion,Sql,Datetime,Type Conversion,在我的视图设置中更改我的一列时,我有一个问题: CASE WHEN L.updateTime IS NULL THEN ISNULL(CONVERT(VARCHAR(20), L.updateTime, 120), 'PENDING') ELSE L.updateTime END AS updateTime 该命令成功,但当我尝试选择top 1000时,它显示一个错误: 从字符串转换日期和/或时间时转换失败 我已经尝试了我能想到的每一个选择,但都不管用。有
CASE
WHEN L.updateTime IS NULL
THEN ISNULL(CONVERT(VARCHAR(20), L.updateTime, 120), 'PENDING')
ELSE L.updateTime
END AS updateTime
该命令成功,但当我尝试选择top 1000时,它显示一个错误:
从字符串转换日期和/或时间时转换失败
我已经尝试了我能想到的每一个选择,但都不管用。有什么建议吗
尝试:
CASE
WHEN L.updateTime IS NULL
THEN 'PENDING'
ELSE L.updateTime
END AS updateTime
CASE
WHEN L.updateTime IS NULL
THEN CONVERT(VARCHAR(20), 'PENDING')
ELSE L.updateTime
END AS updateTime
CASE
WHEN L.updateTime IS NULL
THEN ISNULL(L.updateTime, 'PENDING')
ELSE L.updateTime
END AS updateTime
还有很多其他的
我看到了这个存在的问题并尝试了它,但当我尝试查看我的视图时,仍然会出错。
大小写表达式返回一种类型。根据SQL的类型规则,使用了限制最严格的类型。也就是说,日期是通过字符串返回的。如果返回的类型是日期/时间,则必须转换所有字符串,包括“PENDING”
ELSE子句表示返回类型是日期/时间
我建议:
COALESCE(CONVERT(varchar(20), L.updateTime, 120), 'PENDING') AS updateTime
案例逻辑似乎没有必要。联合做你想做的事。我想出来了。。。我还需要在语句的else部分转换datetime。。确保case语句中的所有字符串格式都相同,因为我正在转换为string 感谢@Lamak的指导
CASE WHEN L.updateTime IS NULL THEN ISNULL(CONVERT(varchar(20), L.updateTime, 120),'PENDING') ELSE CONVERT(varchar(20), L.updateTime, 120) END AS updateTime
updateTime是一种datetime数据类型,您希望同一个大小写表达式返回varchar20或datetime…同一个表达式必须返回单个数据类型您必须将datatime强制转换为字符串,因为pending不是有效的时间戳。请尝试COALESCECONVERTvarchar20,L.updateTime,120,'PENDING'@dnoeth我刚尝试过大小写当L.updateTime为NULL时,然后COALESCECONVERTvarchar20,L.updateTime,120,'PENDING'否则L.updateTime将以updateTime结束,但仍然存在相同的错误您只需要COALESCE部分:-