1

今日の日付から 30 日前の日付を持つレコードを表示しようとしています (テーブルに日付列があります)。そして、それが表示されたら、Date=今日の日付で詳細を追加して新しいレコードを作成する必要があります..私はこれを試しました:

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

しかし、すべてのレコードが表示されています..

4

2 に答える 2

0

わかりました、私が提案した方法が非効率的かもしれないことは認めますが、一方が日時で、もう一方が日付である場合、これは >= <= アプローチよりも効率的であると思いますこのように、そして内部では日時は実際には浮動小数点であるため、純粋な効率のために、これを試してください:

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 に答える