查找两个日期之间的记录

时间:2015-05-04 05:08:53

标签: sql sql-server-2008 between

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

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'

2 个答案:

答案 0 :(得分:1)

最好将其投射到目前,而不是依赖于 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)

答案 1 :(得分: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