查找2个给定日期之间的结果

时间:2017-10-31 08:44:33

标签: mysql sql

我尝试从SQL日期查询中获取结果,但我找到0结果

如何格式化日期或是语法问题?

Table1
! START_DATE_TIME     ! Result !
!---------------------!--------!
! 2011-03-17 15:09:07 ! name1  !
! 2011-03-18 07:05:15 ! name1  !
! 2011-03-19 14:00:02 ! name2  !
!------------------------------!

date1=as.Date("2011-03-16")
date2=as.Date("2011-03-18")

SELECT * FROM Table1 where START_DATE_TIME 
between date1 and date2

感谢您的帮助

2 个答案:

答案 0 :(得分:4)

between用于日期/时间范围是一种反模式。改为明确的范围条件:

WHERE START_DATE_TIME >= '2011-03-16'
  AND START_DATE_TIME < '2011-03-19'

请注意要排除的第一时刻的包含性下限(>=)和独占上限(<)。

理由:

  • 时间单位不统一(闰年,闰秒使得计算任何时期的正确最后时刻变得困难)
  • 时间组件的分辨率未知(要包含多少.9999?)

您可以在即席查询中包含日期本身(以单引号括起来)。如果从程序执行语句,请使用绑定变量

在比较中,日期(没有时间组件)会自动扩展到时间戳,包括00:00:00时间。

有关此内容的更多信息:http://modern-sql.com/feature/extract#anit-patter-where-clause

答案 1 :(得分:1)

这不是声明变量的正确方法。这是:

SET @var_name = expr;

您的查询将是:

SET @date1 = '2011-03-16';
SET @date2 = '2011-03-18';

SELECT * 
FROM Table1 
WHERE START_DATE_TIME BETWEEN @date1 AND @date2

您可以找到更多信息here