我正在尝试将列值转换为日期时间。
CONVERT(datetime,ColName,105)
这会将所有空白值转换为默认值1900-01-01 00:00:00.000。 我也想保留转换后的空白值。
答案 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是唯一的选择,因为日期类型如IIF
,select IIF(TRIM(ColName)='',NULL,CONVERT(datetime, ColName,105))
等都是标量类型,就像date
或datetime
一样。没有空的日期或日期时间。唯一的可能是对于缺失值或实际日期使用NULL。
尝试返回某种空白值意味着必须将日期转换回字符串。