[ad_1]
我必须获得从过去 30 行到今天的所有行的记录。 我已经尝试过,但不起作用
我尝试过的:
从 dsr_data 选择 date_time,其中 date_time >= CONVERT(Varchar(100), DATEADD(DAY,-30,GETDATE()),103) 和 date_time <= CONVERT(varchar(100), getdate(),103)
解决方案3
SELECT date_time FROM dsr_data WHERE date_time between DATEADD(DAY,-30,GETDATE()) and GETDATE();
解决方案1
你为什么使用 CONVERT?
唯一可能的原因与它不起作用的原因相同:您将日期存储为 NVARCHAR 列,而不是 DATE、DATETIME 或 DATETIME2。
当您比较字符串时,比较完全基于两个字符串中的第一个不同字符:并且由于您专门选择以 103 格式(即“dd/MM/yyyy”)格式化日期,因此比较将完全是垃圾 -例如,年份将最后检查,因此 31/01/2017 将早于 31/12/1952,因为比较将基于月份的第一位数字,并且“0”小于“1”
更改您的数据库。 始终以适当的数据类型存储数据:这意味着整数值存储在 INT 列中,日期信息存储在 DATE、DATETIME 或 DATETIME2 列中,等等。 如果你不这样做,这只是许多令人讨厌的问题中的第一个,等待着你的到来……
解决方案2
使用下面的查询。
SELECT date_time FROM dsr_data WHERE date_time >= DATEADD(day,-30, getdate()) and date_time <= getdate()
[ad_2]
コメント