首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Coalesce和nullif处理子字符串和空值

Coalesce和nullif处理子字符串和空值
EN

Stack Overflow用户
提问于 2019-05-22 07:19:55
回答 2查看 603关注 0票数 1

我使用COALESCE和NULLIF来处理字段中的datetime,但仍然可以在输出中获得空字符串的减法vlaues

代码语言:javascript
复制
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字段的示例数据:

取消时间

代码语言:javascript
复制
Blank
19/05/19 22:46:05

错误输出:

代码语言:javascript
复制
20 / /  ::
2019/05/19 22:46:05

预期输出:

代码语言:javascript
复制
Blank
2019/05/19 22:46:05

我期望输出中的20 // ::为空。

EN

回答 2

Stack Overflow用户

发布于 2019-05-22 07:45:38

您可以使用CASE来识别“坏”值,并在特定情况下产生结果。例如:

代码语言:javascript
复制
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。使用适当的数据类型,例如DATETIMESMALLDATETIMEDATETIME2

票数 0
EN

Stack Overflow用户

发布于 2019-05-22 09:15:29

我建议您只使用原生格式的日期/时间来处理数据。但在你的情况下,你就不能把'20'

代码语言:javascript
复制
select '20' + canceltime
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56247444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档