我正在更新公司中的一些旧水晶报告,当时我偶然发现有些人正在搜索yyyy-MM-dd
范围内的日期,而另一些人正在搜索范围内的日期yyyyMMdd
。我还发现它们导致的结果略有不同,所以我开始进一步调查。
我检查了数据库(在 MS SQL Server 上运行),它将日期作为字符串以yyyyMMdd
格式存储在正在搜索的字段中。
在使用yyyy-MM-dd
Crystal Reports 进行的 SQL 查询的格式的报表中包含
WHERE ("Remiss_ank"."Skapad_datum">='2013-07-01'
AND "Remiss_ank"."Skapad_datum"<='2013-07-31')
而使用该yyyyMMdd
格式的报告有一个 SQL 查询,其中包含
WHERE ("Remiss_ank"."Skapad_datum">='20130701'
AND "Remiss_ank"."Skapad_datum"<='20130731')
由于数据库中的所有日期都以yyyyMMdd
我可以理解的格式存储,如果前者根本不会给出任何结果,但它实际上返回后者的子集。事实上,第一个查询返回日期在 20130702 到 20130731 范围内的所有记录。
有人可以解释为什么我看到这个结果,以及为什么字符串2013-07-02
被认为是字符串间隔的一部分,20130701
而20130731
不是2013-07-01
。