如何在SQL Server中正确选择"之间"?

Kik*_*oaw 2 sql vb.net sql-server

我在两个日期之间选择时遇到问题.我试图从SQL Server数据库中选择数据,但结果不是我想要的.有人能帮我吗?

我有4条数据库记录,所有记录都格式为GeneralDate

order_date
---------------------------
2018-07-17 07:10:40.000 AM
2018-07-17 07:10:40.000 AM
2018-07-16 07:59:23.000 AM
2018-07-16 07:59:23.000 AM
Run Code Online (Sandbox Code Playgroud)

这是代码

SELECT order_date 
FROM ORDER_RECORDS 
WHERE order_date >= '2018-07-16 08:59:23.000 AM' 
  AND order_date < '2018-07-16 08:59:23.000 AM'
Run Code Online (Sandbox Code Playgroud)

样品日期来自a DateTimePicker1.Value.

显示的查询返回零结果,因为只有日期为真且时间为假.如您所见,数据库记录的开始时间为07:59:23.000 AM,获取数据的查询开始于08:59:23.000 AM

另一个示例查询

SELECT order_date 
FROM ORDER_RECORDS 
WHERE order_date >= '2018-07-16 03:59:23.000 AM' 
  AND order_date < '2018-07-16 08:59:23.000 AM'
Run Code Online (Sandbox Code Playgroud)

由于查询从03:59:23.000 AM开始,因此返回两行

这是结果

2018-07-16 07:59:23.000 AM
2018-07-16 07:59:23.000 AM
Run Code Online (Sandbox Code Playgroud)

我想要的是在两个日期之间获取数据并忽略时间.

小智 5

您需要将datetime转换为date

SELECT order_date FROM ORDER_RECORDS WHERE order_date> = CAST('2018-07-16 08:59:23.000 AM'AS DATE)AND order_date <CAST('2018-07-16 08:59:23.000 AM'AS DATE)

更新:

SELECT order_date 
FROM ORDER_RECORDS 
WHERE CAST(order_date AS DATE) BETWEEN CAST('2018-07-16 08:59:23.000 AM' AS DATE) 
                                   AND CAST('2018-07-16 08:59:23.000 AM' AS DATE)
Run Code Online (Sandbox Code Playgroud)

更新 - 日期时间比较

DECLARE
    @StartDT DATETIME = CAST('2018-07-16 08:59:23.000 AM' AS DATE),
    @EndDT   DATETIME = DATEADD(DAY, 1, CAST('2018-07-16 08:59:23.000 AM' AS DATE))

SELECT order_date 
FROM ORDER_RECORDS 
WHERE order_date >= @StartDT AND order_date < @EndDT
Run Code Online (Sandbox Code Playgroud)