【问题标题】:How UNIX_TIMESTAMP worksUNIX_TIMESTAMP 的工作原理
【发布时间】:2021-03-20 15:52:07
【问题描述】:

我很失望:-(

为什么这个请求可以正常工作

select UNIX_TIMESTAMP(STR_TO_DATE("08:00:00","%H:%i:%s"));

为什么另一个失败了?

SET @date = STR_TO_DATE("08:00:00","%H:%i:%s");
select @date as _date, UNIX_TIMESTAMP(@date) as _unixtimestamp;

mysql Ver 14.14 Distrib 5.5.60,用于 debian-linux-gnu (x86_64) 使用 阅读第 6.3 行

【问题讨论】:

    标签: mysql sql string datetime unix-timestamp


    【解决方案1】:

    您提供的字符串只有str_to_date() 的时间部分,因此数据库需要选择它应该返回的数据类型。

    我怀疑变量赋值产生了一个TIME,它不是UNIX_TIMESTAMP() 的有效输入。这可以在查看 sedonc 语句的结果时看到,其中@date 是时间格式:

    _日期 | _unixtimestamp :------- | -------------: 08:00:00 | 0

    另一方面,函数内的直接转换(如在您的第一条语句中)可能为 MySQL 提供了足够的上下文,因此它知道您想要一个 DATETIME(日期部分默认为当前日期)。

    如果您明确说明目标数据类型,问题就会消失:

    set @date = cast(str_to_date('08:00:00', '%H:%i:%s') as datetime);
    select @date as _date, unix_timestamp(@date) as _unixtimestamp;
    

    产量:

    _日期 | _unixtimestamp :----------------- | -------------: 2020-12-09 08:00:00 | 1607500800

    Demo on DB Fiddle

    【讨论】:

    • 感谢您的回复。最后我使用了这样的连接:select UNIX_TIMESTAMP(CONCAT(DATE_FORMAT(NOW(), "%Y-%m-%d "), STR_TO_DATE("08:00:00","%H:%i:%s")));
    • 欢迎@xyloweb。如果我的回答正确回答了您的问题,那么请点击对号 accept it...谢谢!
    猜你喜欢
    • 2013-01-08
    • 2020-07-19
    • 2019-01-24
    • 2011-10-26
    • 2017-12-02
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多