无法从数据库中获取记录与条件之间
问题描述:
日期使用此格式在我的数据库中进行扫描。无法从数据库中获取记录与条件之间
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语句从数据库中获取结果。但我无法获得任何记录。
答
STOP存储和解析dates
作为VARCHAR
。在DATETIME
或DATE
数据类型,而不是Varchar
存储日期,这将有助于你避免所有这些转换的
现在回来的问题,您正在尝试比较Varchar
和Varchar2
之间Varchar1
这不是Date1
和Date2
之间一样Date
。
转换的CREATEDATE
到datetime
和Between
条款
;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()
答
为什么你做反向转换回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)
;
为什么你在一个VarChar存储日期/时间戳?为什么将它转换为日期时间然后回到VarChar? – dnoeth