1

我正在尝试显示从今天开始 30 天的日期(我在表格中有列日期)的记录。一旦它显示出来,我需要通过使用 Date= 今天的日期添加详细信息来创建新记录。我试过这个:

select * from 
paymenthist 
where 
Date = CONVERT(datetime, CONVERT(varchar, DATEADD(day, -30, GETDATE()), 101))

但是所有记录都在显示..

4

2 回答 2

0

好的,我承认我建议的方式可能效率低下,但是如果一个是日期时间,另一个是日期,那么我相信这将比 >= <= 方法更有效,因为 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
于 2012-09-24T17:35:16.553 回答
-1

它在某种程度上取决于日期列的数据类型,但试试这个。

select * from paymenthist where cast(Date as date) =  cast(DATEADD(day, -30, GETDATE()) as date)
于 2012-09-24T12:31:26.290 回答