日期时间转换并保留空白

时间:2018-11-06 10:32:44

标签: sql sql-server

我正在尝试将列值转换为日期时间。

CONVERT(datetime,ColName,105)

这会将所有空白值转换为默认值1900-01-01 00:00:00.000。 我也想保留转换后的空白值。

4 个答案:

答案 0 :(得分:4)

如果ColName仅包含空(var)char值,则可以将NULLIF添加到ColName中,例如

CONVERT(datetime, NULLIF(ColName, ''),105)

答案 1 :(得分:0)

如果要转换为DATETIME,则将无法获得“空白”值,但是可以使用NULL:

CASE WHEN ColName IS NULL OR LEN(LTRIM(ColName)) = 0 THEN NULL ELSE CONVERT(DATETIME, ColName, 105) END

这会将所有NULL,空白字符串或空格转换为NULL DATETIME,并将其他所有值转换为带有值(假定是有效日期)的DATETIME。

答案 2 :(得分:0)

空白值将转换为SQL Server默认日期时间值。以下查询将帮助您不转换空白值。但是,最好使用NULL而不是''

SELECT CASE WHEN NULLIF(COLUMN,'') = NULL THEN 
            NULL 
      ELSE CONVERT(datetime, dd,105) END 
FROM <TABLE> 

答案 3 :(得分:0)

首先,将日期存储为字符串并使用空字符串表示缺失值是非常糟糕的主意。通过将该字段转换为可为空的npm install [package name]date,可以彻底解决该问题。

在此之前,或者为了轻松进行,您可以使用所有受支持的SQL Server版本上可用的TRY_PARSE函数。支持的最早的SQL Server版本是2012。105是意大利语格式,因此:

datetime

例如

SELECT TRY_PARSE(ColName as datetime USING 'it')

将字符串值解析为值为select try_parse( '13-11-2018' as datetime USING 'it') 的{​​{1}}。任何无法解析的内容都将返回NULL:

datetime

将返回2018-11-13 00:00:00.000

在早期版本中,可以使用select try_parse( '' as datetime USING 'it') 或等效的NULL

CASE WHEN

返回NULL是唯一的选择,因为日期类型如IIFselect IIF(TRIM(ColName)='',NULL,CONVERT(datetime, ColName,105)) 等都是标量类型,就像datedatetime一样。没有空的日期或日期时间。唯一的可能是对于缺失值或实际日期使用NULL。

尝试返回某种空白值意味着必须将日期转换回字符串。