我正在尝试显示从今天开始 30 天的日期(我在表格中有列日期)的记录。一旦它显示出来,我需要通过使用 Date= 今天的日期添加详细信息来创建新记录。我试过这个:
select * from
paymenthist
where
Date = CONVERT(datetime, CONVERT(varchar, DATEADD(day, -30, GETDATE()), 101))
但是所有记录都在显示..
我正在尝试显示从今天开始 30 天的日期(我在表格中有列日期)的记录。一旦它显示出来,我需要通过使用 Date= 今天的日期添加详细信息来创建新记录。我试过这个:
select * from
paymenthist
where
Date = CONVERT(datetime, CONVERT(varchar, DATEADD(day, -30, GETDATE()), 101))
但是所有记录都在显示..
好的,我承认我建议的方式可能效率低下,但是如果一个是日期时间,另一个是日期,那么我相信这将比 >= <= 方法更有效,因为 SQL 通常不擅长利用索引进行查询像这样,并且在幕后日期时间实际上是一个浮点数,所以为了纯粹的效率,试试这个:
CREATE TABLE ##PaymentHistory
(
ID INT IDENTITY,
[Date] DATETIME,
Col1 INT,
Col2 INT
)
INSERT INTO ##PaymentHistory([Date],Col1,Col2)
VALUES(FLOOR(CAST(GETDATE() -29 AS FLOAT) ) ,1,1)
, (FLOOR(CAST(GETDATE() -30 AS FLOAT) ) ,2,2)
, (FLOOR(CAST(GETDATE() -31 AS FLOAT) ) ,3,3)
SET IDENTITY_INSERT ##PaymentHistory ON
INSERT INTO ##PaymentHistory(ID, [Date], Col1, Col2)
SELECT ID, GETDATE(), Col1, Col2
FROM ##PaymentHistory
WHERE CAST(Date AS FLOAT) = FLOOR(CAST(GETDATE() -30 AS FLOAT) )
SET IDENTITY_INSERT ##PaymentHistory OFF
它在某种程度上取决于日期列的数据类型,但试试这个。
select * from paymenthist where cast(Date as date) = cast(DATEADD(day, -30, GETDATE()) as date)