2016-03-05 66 views
0

日期使用此格式在我的数据库中进行扫描。无法从数据库中获取记录与条件之间

04 Feb 2016 
04 Mar 2016 
04 Mar 2016 
04 Mar 2016 
04 Mar 2016 

,我使用

select CONVERT(VARCHAR(20),Convert(datetime,CREATEDATE),106) 
from job 
where CONVERT(VARCHAR(20),Convert(datetime,CREATEDATE),106) 
between  Convert(VARCHAR(20),Convert(datetime,getdate())-25,106) 
     AND CONVERT(VARCHAR(20),Convert(datetime,GETDATE()),106) 

SQL语句从数据库中获取结果。但我无法获得任何记录。

+1

为什么你在一个VarChar存储日期/时间戳?为什么将它转换为日期时间然后回到VarChar? – dnoeth

回答

0

STOP存储和解析dates作为VARCHAR。在DATETIMEDATE数据类型,而不是Varchar存储日期,这将有助于你避免所有这些转换的

现在回来的问题,您正在尝试比较VarcharVarchar2之间Varchar1这不是Date1Date2之间一样Date

转换的CREATEDATEdatetimeBetween条款

;WITH job 
    AS (SELECT * 
     FROM (VALUES (Cast('04 Feb 2016' AS VARCHAR(50))), 
         (Cast('04 Mar 2016' AS VARCHAR(50))), 
         (Cast('04 Mar 2016' AS VARCHAR(50))), 
         (Cast('04 Mar 2016' AS VARCHAR(50))), 
         (Cast('04 Mar 2016' AS VARCHAR(50)))) cs (CREATEDATE)) 
SELECT CREATEDATE 
FROM job 
WHERE CONVERT(DATETIME, CREATEDATE) BETWEEN Getdate() - 25 AND Getdate() 
0

为什么你做反向转换回VARCHAR的日期比较?它工作正常没有:

declare @job table (CREATEDATE varchar(50)); 
insert into @job values 
('04 Feb 2016'), 
('04 Mar 2016'), 
('04 Mar 2016'), 
('04 Mar 2016'), 
('04 Mar 2016'); 

select Convert(datetime,CREATEDATE,106) 
from @job t 
where Convert(datetime,CREATEDATE,106) 
between  Convert(datetime,getdate()-25,106) 
     AND Convert(datetime,getdate(),106) 
; 
相关问题