比较SQL中nvarchar列的Datetime值

时间:2017-01-17 05:54:58

标签: sql sql-server datetime

在SQL Azure服务器数据库中,表具有nvarchar列,其中包含字符串格式(dd/MM/yyyy)的日期值。例如03/11/2011

ARTICLE1 包含某些记录的空值。

以下是我到目前为止所尝试的查询,但我收到了错误

  

将nvarchar数据类型转换为日期时间数据类型会导致超出范围的值。

SQL查询

select 
    [Code], concat(fname,' ',lname) as Name, [ARTICLE1] 
from 
    #T2 
where    
    CAST(ISNULL( [ARTICLE1], '1900-01-01') AS DATETIME) >= CONVERT(DATETIME, '31/01/1920', 103) 
    and CAST(ISNULL( [ARTICLE1] , '1900-01-01') AS DATETIME) <= CONVERT(DATETIME, '31/01/2017', 103) 
    and Category in ('STAFF', 'MANAGER')

1 个答案:

答案 0 :(得分:2)

我得到了解决方案,需要将字符串转换为日期时间而不是CAST

select [Code],concat(fname,' ',lname) as Name,[ARTICLE1] From #T2 where    
 CONVERT( DATETIME, ISNULL( [ARTICLE1] , '1900-01-01'), 103 )  >= CONVERT( DATETIME, '31/01/1920', 103 ) and 
 CONVERT( DATETIME, ISNULL( [ARTICLE1] , '1900-01-01'), 103 )  <= CONVERT( DATETIME, '31/01/2017' , 103 ) and Category in ('STAFF','MANAGER')
相关问题