如何在SQL Server中正确选择“之间使用”?

时间:2018-07-23 00:57:38

标签: sql sql-server vb.net

我在选择两个日期之间遇到问题。我试图从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

这是代码

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'

采样日期来自DateTimePicker1.Value

显示的查询返回零结果,因为只有日期为true,时间为false。如您所见,数据库记录的起始时间为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'

由于查询从03:59:23.000 AM开始,这会返回两行结果

这是结果

2018-07-16 07:59:23.000 AM
2018-07-16 07:59:23.000 AM

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

1 个答案:

答案 0 :(得分:5)

您需要将日期时间转换为日期

从ORDER_RECORDS WHERE订单中选择订单日期> = CAST('2018-07-16 08:59:23.000 AM'DATE)AND order_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)

更新-日期时间比较

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