我正在将COALESCE与NULLIF一起使用来处理字段中的日期时间,但仍然在输出中得到空字符串的subtring 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。
“取消时间”字段中的示例数据:
取消时间
Blank
19/05/19 22:46:05
错误输出:
20 / / ::
2019/05/19 22:46:05
预期输出:
Blank
2019/05/19 22:46:05
我期望20 / / ::在输出中为空白。
答案 0 :(得分:0)
您可以使用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
。
答案 1 :(得分:0)
我建议只将其本机格式作为日期/时间处理。但是,就您而言,您是否只能在'20'
之前添加前缀?
select '20' + canceltime