查找两个日期之间的记录

Posted

技术标签:

【中文标题】查找两个日期之间的记录【英文标题】:Find record between two dates 【发布时间】:2015-05-04 05:08:52 【问题描述】:

当我在下面写查询时,它会给出记录。

SELECT [srno],[order_no],[order_date],[supplier_name],[item_code],[item_name],[quntity]
FROM [first].[dbo].[Purchase_Order]
WHERE order_date BETWEEN '22/04/2015' AND '4/05/2015'

在这个查询中,如果我没有在 '4/05/2015' 中添加 0,它会返回记录。 但是当我将 0 添加到日期即 '04/05/2015' 时,它不会提供任何记录。

SELECT [srno],[order_no],[order_date],[supplier_name],[item_code],[item_name],[quntity]
FROM [first].[dbo].[Purchase_Order]
WHERE order_date BETWEEN '22/04/2015' AND '04/05/2015'

【问题讨论】:

您可以将其转换为日期类型并指定格式,而不是依赖于内置的转换。 我的 'order_date' 数据类型是 'nvarchar' @Pradnya 那么你应该尽快解决这个问题 @Prdnya 为您的数据使用正确的列类型。就像您不会在日期列中存储布尔值一样,您也不应该使用 nvarchar 列来存储日期。 Bad habits to kick : mis-handling date / range queries 【参考方案1】:

它不起作用的原因是因为 SQL 正在尝试进行字符串比较,因为您的两种类型都是字符串类型,但是您真正想做的是日期比较。

你应该这样做。由于您只需要日期部分,因此您可以去掉时间并将样式 103 用于您的格式 dd/mm/yyyy

WHERE CONVERT(DATETIME,LEFT(order_date,10),103)
BETWEEN CONVERT(DATETIME,'20150422') AND CONVERT(DATETIME,'20150504')

如果您的order_date 有类似5/4/2015 03:20:24PM 的日期,您也可以使用它

WHERE CONVERT(DATETIME,LEFT(order_Date,CHARINDEX(' ', order_Date) - 1),103) 
BETWEEN CONVERT(DATETIME,'20150422') AND CONVERT(DATETIME,'20150504')

一个长期的解决方案是将您的列 order_date 更改为 DATE/DATETIME

【讨论】:

我将其转换为 DATETIME 但它也给出错误“从字符串转换日期和/或时间时转换失败。” 这个SELECT TOP 1 order_date FROM Purchase_Order WHERE ISDATE(order_date) = 0的输出是什么 它的结果是 21-04-2015 03:20:24PM 它给出了错误将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围。 你所有的日期都是这种格式的DD-MM-YYYY 。如果格式在DD-MM-YYYYMM-DD-YYYY 之间发生变化,则上述方法将不起作用【参考方案2】:

最好将其投射到日期而不是依赖于IMPLICIT转换

SELECT [srno],[order_no],[order_date],[supplier_name],[item_code],
 [item_name],[quntity] FROM [first].[dbo].[Purchase_Order] where 
convert(date,order_date,105) BETWEEN cast('22/04/2015' as Date) AND cast('04/05/2015' as date)

【讨论】:

它给出错误“从字符串转换日期和/或时间时转换失败。” 你能告诉我 ORDER_date 的类型和格式吗?? 其数据类型为 nvarchar 格式为 '22-04-2015 04:24:00PM' 您 order_date '22-04-2015 04:24:00PM' 包含字符,因此 sql 无法将字符转换为日期或日期时间 .. 从字符串转换日期和/或时间时转换失败。

以上是关于查找两个日期之间的记录的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 如何查找日期在开始日期到结束日期之间的记录

什么是 django 查询来查找搜索日期在两列之间的记录不是?

使用亚音速记录两个日期之间

SQL 查询日期范围保存在 2 列中

如何在 vb.net 中获取两个日期之间的记录?

Laravel - 使用ajax获取两个日期之间的记录