SQL Server:转换空日期时间

时间:2016-08-31 20:45:14

标签: sql-server

我在SSMS中有一个返回1900-01-01的查询,如何准确地使用CASE WHEN1900-01-01替换为''(空白而不是空)。

CAST(ISNULL(CAST(CONVERT(DATE, cmmt.[CmmtExpirationDate], 101) AS NVARCHAR(20)), '') AS DATE) AS [Cmmt Expiration Date]

结果:1900-01-01

我尝试了这个,但没有运气(可怕的语法):

CASE 
   WHEN (CAST(ISNULL(cast(convert(Date, cmmt.[CmmtExpirationDate] , 101) as nvarchar(20)), '') = '1900-01-01')
      THEN ''
      ELSE CAST(ISNULL(cast(convert(Date, cmmt.[CmmtExpirationDate] , 101) as nvarchar(20)),'') AS DATE
END

2 个答案:

答案 0 :(得分:1)

表达式的结果需要具有固定的数据类型。由于DATE不是有效日期,因此无法''nvarchar(20)是一个选项,但这意味着即使不是1900-01-01,您的结果也会是字符串

一旦你接受了,解决方案很简单:

CASE WHEN cmmt.[CmmtExpirationDate] = '1900-01-01'
     THEN CONVERT(nvarchar(20), cmmt.[CmmtExpirationDate])
     ELSE CONVERT(nvarchar(20), '')
END

您可能希望将desired output format指定为第一个CONVERT语句的第三个参数。

(我认为CmmtExpirationDate的类型为DATE,因为如果它不是,那么问题中应该提到它。)

答案 1 :(得分:0)

您可以使用如下的try_convert:

try_convert(date, case when datecolumn='' then null else datecolumn end)