Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
日期范围查询未返回所有记录-SQL_Sql_Date_Between - Fatal编程技术网

日期范围查询未返回所有记录-SQL

日期范围查询未返回所有记录-SQL,sql,date,between,Sql,Date,Between,我有一个SQL db,我需要根据库存项目完成的月份过滤结果,以便进行计费 我使用的字段称为CompletionDate。这是我正在使用的代码 input name='criteria' type='hidden' value="WHERE CompletionDate BETWEEN '8-1-2013' AND '8-31-2013'" 我得到了一些返回的记录,但不是全部。我怀疑问题在于CompletionDate字段的格式。它目前是一个varchar(10)。我正在以MM-DD-YYYY格

我有一个SQL db,我需要根据库存项目完成的月份过滤结果,以便进行计费

我使用的字段称为CompletionDate。这是我正在使用的代码

input name='criteria' type='hidden' value="WHERE CompletionDate BETWEEN '8-1-2013' AND '8-31-2013'"
我得到了一些返回的记录,但不是全部。我怀疑问题在于CompletionDate字段的格式。它目前是一个varchar(10)。我正在以MM-DD-YYYY格式存储此字段中的数据

经过一些搜索,我了解到,由于该字段位于varchar数据类型中,因此上述代码无法按我希望的方式工作。我试过了,但没用

input name='criteria' type='hidden' value="WHERE to_date(CompletionDate, 'mm-dd-yyyy') BETWEEN to_date('8-1-2013', 'mm-dd-yyyy') AND to_date('8-31-2013', 'mm-dd-yyyy')"

有人能帮我找到解决方案吗?

更好的方法是:

where CompletionDate >= the start of your date range
and CompletionDate < the day after the end of your date range.
其中CompletionDate>=日期范围的开始
和CompletionDate<日期范围结束后的第二天。
原因1是它将考虑时间因素(如果适用)。 原因2是在where子句中使用函数会降低生产速度


顺便说一句,如果CompletionDate是数据库中的char或varchar数据类型,则会出现严重问题。

因为该字段是varchar类型,所以搜索的不是日期范围,而是文本范围。您确实应该将日期存储在日期类型字段中,因为这样您就可以轻松高效地进行日期范围查询

使用to_date的变通方法在理论上应该是可行的,尽管它效率很低,因为数据库必须尝试将每一行的文本转换为真实日期,以便能够进行比较。至于为什么它实际上不起作用,目前还不清楚。你在使用什么数据库?格式字符串是否正确,还是应为大写('MM-DD-YYYY')


如果您顽固地将日期存储为数据库中的文本,则使用可按词汇排序的格式,例如YYYY-MM-DD(包括前导零)(2013-08-01),似乎可以使范围查询正常工作。但是,有几个很好的理由可以解释为什么数据库有专用的日期数据类型

同样的问题-它忽略了一些结果。是,我需要将字段转换为日期数据类型。这是我最初的数据库设置中的一个疏忽。感谢您的快速响应这是一个错误的举动-尝试将字段转换为日期数据类型。谢谢