【发布时间】:2013-08-03 13:40:26
【问题描述】:
我正在更新公司的一些旧水晶报告,当时我偶然发现有些人在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 格式的报告有一个包含
WHERE ("Remiss_ank"."Skapad_datum">='20130701'
AND "Remiss_ank"."Skapad_datum"<='20130731')
由于数据库中的所有日期都以yyyyMMdd 格式存储,因此如果前者根本不会给出任何结果,我会理解,但它实际上返回后者的子集。事实上,第一个查询返回日期在 20130702 到 20130731 范围内的所有记录。
谁能解释我为什么看到这个结果,以及为什么字符串 2013-07-02 被认为是字符串区间 20130701 到 20130731 的一部分,而 2013-07-01 不是。
【问题讨论】:
标签: sql sql-server string date crystal-reports