我必须查询数据的要求,其中已被今天的日期之前创建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。
谢谢
答案 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())