Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果case语句中为null,则将datetime转换为字符串“pending”_Sql_Datetime_Type Conversion - Fatal编程技术网

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部分:-