在MySQL中,如何将时间戳日期与仅日期参数进行比较?
在SQL语句中,如何将保存为时间戳的日期与YYYY-MM-DD格式的日期进行比较 示例:在MySQL中,如何将时间戳日期与仅日期参数进行比较?,mysql,datetime,date,Mysql,Datetime,Date,在SQL语句中,如何将保存为时间戳的日期与YYYY-MM-DD格式的日期进行比较 示例:从时间戳为'2012-05-25'的表中选择* 我希望此查询返回指定日期内具有时间戳的所有行,但它只返回具有午夜时间戳的行 谢谢您可以使用DATE()函数提取时间戳的日期部分: SELECT * FROM table WHERE DATE(timestamp) = '2012-05-25' 但是,如果您在时间戳列上有索引,这会更快,因为如果您有索引,它可以利用时间戳列上的索引: SELECT * FROM
从时间戳为'2012-05-25'的表中选择*
我希望此查询返回指定日期内具有时间戳的所有行,但它只返回具有午夜时间戳的行
谢谢您可以使用DATE()
函数提取时间戳的日期部分:
SELECT * FROM table
WHERE DATE(timestamp) = '2012-05-25'
但是,如果您在时间戳列上有索引,这会更快,因为如果您有索引,它可以利用时间戳列上的索引:
SELECT * FROM table
WHERE timestamp BETWEEN '2012-05-25 00:00:00' AND '2012-05-25 23:59:59'
使用MYSQL的转换功能:
SELECT * FROM table WHERE DATE(timestamp) = '2012-05-05'
这应该有效从时间戳>='2012-05-05 00:00:00'的表格中选择*
WHERE cast(timestamp as date) = '2012-05-05'
和timestamp如果您使用SQL参数来运行查询,那么这将非常有用
SELECT * FROM table WHERE timestamp between concat(date(?), ' ', '00:00:00') and concat(date(?), ' ', '23:59:59')
使用
当我读到你的问题时,我以为你是在Oracle DB上,直到我看到标签“MySQL”。无论如何,对于与Oracle合作的人员,以下是方法:
SELECT *
FROM table
where timestamp = to_timestamp('21.08.2017 09:31:57', 'dd-mm-yyyy hh24:mi:ss');
正如一些人所建议的,通过使用DATE(timestamp)
可以对列进行操作,因此不能依赖索引顺序
但是,只有在包含毫秒的情况下,在
之间使用才是可靠的。在“2012-05-05 00:00:00”和“2012-05-05 23:59:59”之间的时间戳示例中,排除时间戳介于2012-05-05 23:59:59.001和2012-05-05 23:59:59.999之间的记录。然而,由于数据类型的精确性,即使这种方法也存在一些问题。有时999毫秒被四舍五入
最好的办法是:
SELECT * FROM table
WHERE date>='2012-05-05' AND date<'2012-05-06'
从表中选择*
其中date>='2012-05-05'和date当我研究这个问题时,我认为最好修改BETWEEN解决方案,以显示一个特定的非静态/字符串日期的示例,而不是一个可变日期,或者今天的日期,例如CURRENT_date()
。此将使用log\u timestamp列上的索引
SELECT *
FROM some_table
WHERE
log_timestamp
BETWEEN
timestamp(CURRENT_DATE())
AND # Adds 23.9999999 HRS of seconds to the current date
timestamp(DATE_ADD(CURRENT_DATE(), INTERVAL '86399.999999' SECOND_MICROSECOND));
为了避免第二天早上12点的案子,我花了几秒钟/几微秒。但是,您也可以通过比较运算符执行“INTERVAL”1天,以实现更方便读者的非中间方法:
SELECT *
FROM some_table
WHERE
log_timestamp >= timestamp(CURRENT_DATE()) AND
log_timestamp < timestamp(DATE_ADD(CURRENT_DATE(), INTERVAL 1 DAY));
选择*
从某张桌子上
哪里
日志时间戳>=时间戳(当前日期())和
日志时间戳<时间戳(日期添加(当前日期(),间隔1天));
这两种方法都将使用索引,并且应该执行得更快。两者似乎都一样快。通过我刚刚运行的一个小测试,我发现使用BETWEEN的速度要快10倍,只需使用一个日期就可以清楚地知道什么数字意味着什么类型。
SELECT *
FROM some_table
WHERE
log_timestamp
BETWEEN
timestamp(CURRENT_DATE())
AND # Adds 23.9999999 HRS of seconds to the current date
timestamp(DATE_ADD(CURRENT_DATE(), INTERVAL '86399.999999' SECOND_MICROSECOND));
SELECT *
FROM some_table
WHERE
log_timestamp >= timestamp(CURRENT_DATE()) AND
log_timestamp < timestamp(DATE_ADD(CURRENT_DATE(), INTERVAL 1 DAY));