我使用COALESCE和NULLIF来处理字段中的datetime,但仍然可以在输出中获得空字符串的减法vlaues
select coalesce(nullif('20' + LEFT(SUBSTRING(cancelTime,1,8),2)
+ '/' + LEFT(RIGHT(SUBSTRING(canceltime,1,8),5),2) + '/' + RIGHT(SUBSTRING(cancelTime,1,8),2)+' '+
left(SUBSTRING(cancelTime,10,17),2)
+ ':' + right(left(SUBSTRING(cancelTime,10,17),5),2) + ':' + right(SUBSTRING(cancelTime,10,17),2),''),'') as CancelDate
FROM [dbo].[test]
逻辑:只要字段中有日期和时间,我就想显示日期和时间,如果没有值,则将其显示为空。例如,当值为19/05/19 22:46:05时,则显示2019/05/19 22:46:05。
来自Canceltime字段的示例数据:
取消时间
Blank
19/05/19 22:46:05
错误输出:
20 / / ::
2019/05/19 22:46:05
预期输出:
Blank
2019/05/19 22:46:05
我期望输出中的20 // ::为空。
发布于 2019-05-22 07:45:38
您可以使用CASE
来识别“坏”值,并在特定情况下产生结果。例如:
select
case when cancelTime
like '[0-9][0-9]/[0-9][0-9]/[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]'
then ... -- your long formatting formula here
else '' -- blank if it doesn't match a date/time value
end as CancelDate
from [dbo].[test]
无论如何,经验法则是避免将日期/时间数据存储为VARCHAR
。使用适当的数据类型,例如DATETIME
、SMALLDATETIME
或DATETIME2
。
发布于 2019-05-22 09:15:29
我建议您只使用原生格式的日期/时间来处理数据。但在你的情况下,你就不能把'20'
select '20' + canceltime
https://stackoverflow.com/questions/56247444
复制相似问题