如何对日期时间使用通配符

时间:2019-09-12 11:57:16

标签: sql-server

如何将通配符用于datetme? SubmitDate字段是日期时间,但我尝试查询的结果却完全不同。我想要记录SubmitDate从2019-08开始的地方

这是我尝试过的代码:

select * 
from INVPol
where SubmitDate like '[2019-08]%'

1 个答案:

答案 0 :(得分:4)

如何为日期使用通配符” 很简单,您却没有。使用正确的日期逻辑。对于您来说,最佳方法将是以下

SELECT *
FROM dbo.INCPol
WHERE SubmitDate >= '20190801'
  AND SubmitDate < '20190901';

使用具有大于或等于的下边界和具有小于的下边界意味着将返回日期为2019年8月的每一行。通常,这是最广泛的“最佳”方法。当使用带有时间部分的值时,使用BETWEEN的逻辑可能会给出错误的结果。这是因为2019-08-31T00:00:00.0000001 不是 BETWEEN '20190801' and '20190831'(结束阈值之后的1/1000000秒);这意味着您将失去价值一整天的价值。此外,日期'2019-09-01T00:00:00.0000000' BETWEEN '20190801' AND '20190901',因此您可以获得(一些)不需要的行。

尝试在日期上使用通配符将意味着您必须将列的值转换为varchar,这将导致性能问题。将日期保留为日期和时间数据类型,然后将其查询为一个。