查找两个日期之间的记录
Find record between two dates
当我写下面的查询时,它给出了记录。
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,它会 returns 记录。
但是当我将 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'
与其依赖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)
它不起作用的原因是 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
当我写下面的查询时,它给出了记录。
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,它会 returns 记录。 但是当我将 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'
与其依赖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)
它不起作用的原因是 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