使用DATEADD函数检索过去创建的数据

时间:2019-02-02 16:35:09

标签: sql sql-server

我必须查询数据的要求,其中已被今天的日期之前创建11天(或更多)的表。

我尝试使用下面的SQL查询,但对我来说似乎不太好。

SELECT *
FROM PRICE
WHERE CONVERT(nvarchar,CREATED_AT, 112) > CONVERT(nvarchar,(DATEADD(DAY, -10, getdate())),112)

此表中有两条实际符合我的条件的记录。 (这是我的表中的列CREATED_AT的原始格式。) 2019-01-23 16:19:41.127 2019-01-04 15:21:41.127

但我的查询只选择第一个(一月至23)。我在这里做错什么了?

我正在使用SQL Server 2016。

谢谢

2 个答案:

答案 0 :(得分:2)

如果可以避免,请不要对列应用功能。这样会阻止优化器使用索引和分区。

相反,您似乎想要:

WHERE CREATED_AT < DATEADD(day, -10, getdate())

或者:

WHERE CREATED_AT < CONVERT(date, DATEADD(day, -10, getdate()))

第一个将时间部分考虑在内。第二去除时间分量,所以created_at必须是午夜之前。

答案 1 :(得分:0)

您无需转换日期数据类型字符数据类型比较

只需使用

SELECT * FROM PRICE WHERE CREATED_AT > DATEADD(DAY, -10, getdate())