迄今为止 SQL

Int to date in SQL

我尝试将看起来像 YYYYMMDD(例如 20190430)的列 [policyeffective_date] 转换为 SQL 服务器中的日期。

我尝试了一些在论坛上找到的解决方案,但 none 奏效了。目前我有以下代码和错误:

SELECT 
    CONVERT(DATETIME, policyeffective_date, 104) AS test 
FROM 
    [DATAWAREHOUSE].[dbo].[blabla]

错误:

Arithmetic overflow error converting expression to data type datetime.

我也试过:

SELECT 
    CONVERT(DATE, CONVERT(NVARCHAR(8), policyeffective_date), 104)    
FROM 
    [DATAWAREHOUSE].[dbo].[blabla]

错误:

Operand type clash: int is incompatible with date

感谢您的帮助

这适用于 SQL Server 2017:

select cast(cast(20190430 as nvarchar) as DATE) AS DateResult

输出:

DateResult
2019-04-30

您的列中似乎有错误数据。鉴于您得到的是 run-time 错误而不是 compile-time 错误,类型似乎是正确的。

最简单的解决方案是try_convert():

SELECT try_convert(datetime, policyeffective_date, 104) AS test 
FROM [DATAWAREHOUSE].[dbo].[blabla];

但是要找到问题,你可以使用:

SELECT policyeffective_date
FROM [DATAWAREHOUSE].[dbo].[blabla]
WHERE try_convert(datetime, policyeffective_date, 104) IS NULL AND
      policyeffective_date IS NOT NULL