【问题标题】:mysql time_format function qustionmysql time_format 函数问题
【发布时间】:2019-05-29 20:34:58
【问题描述】:

我插入和更新mysql time_format函数以及时表达字符串值,

为什么有些数字会得到

“截断不正确的时间值”

错误?

比如'55'不是查询的问题,但是输入'188'时出现上述错误信息。

类型是 VARCHAR (50)。

我的查询:

INSERT INTO TABLE_HOME (DURATION) 
    VALUES (TIME_FORMAT (# {DURATION, jdbcType = VARCHAR}, '% H:% i:% s'))

UPDATE TABLE_HOME SET DURATION = TIME_FORMAT (# {DURATION, jdbcType = VARCHAR}, '% H:% i:% s')

【问题讨论】:

  • 顾名思义,TIME_FORMAT() 需要时间。在这种情况下,55188 是什么意思?

标签: mysql time-format


【解决方案1】:

Time_Format 并非所有整数都有效..

188 不再是有效时间

即使你把它放在哪里:

"%H= Hour => 188?
 %i=Minute => 188?
 %s"=Second => 188?

您认为188Hour, Minute, Second 的有效时间吗?

【讨论】:

    【解决方案2】:

    TIME_FORMAT() 需要时间。如果你用其他东西喂它,你首先会得到一个演员表。在这种情况下:

    mysql> SELECT CAST(55 AS TIME), CAST(188 AS TIME);
    +------------------+-------------------+
    | CAST(55 AS TIME) | CAST(188 AS TIME) |
    +------------------+-------------------+
    | 00:00:55         | NULL              |
    +------------------+-------------------+
    1 row in set, 1 warning (0.00 sec)
    

    rules 是:

    MySQL 可以识别以下格式的 TIME 值:

    • 作为 'D HH:MM:SS' 格式的字符串。您还可以使用以下“宽松”语法之一:'HH:MM:SS'、'HH:MM'、'D HH:MM'、'D HH'、 或“SS”。这里 D 代表天数,取值范围为 0 到 34。

    • 作为“HHMMSS”格式的不带分隔符的字符串,前提是它作为时间有意义。例如,'101112' 被理解为 '10:11:12',但 '109712' 是非法的(它有一个无意义的微小部分) 并变为“00:00:00”。

    • 作为 HHMMSS 格式的数字,前提是它作为时间有意义。例如,101112 被理解为“10:11:12”。下列 也可以理解其他格式:SS、MMSS 或 HHMMSS。

    在这种情况下,#3 适用:

    • 55 被渲染为 SS 所以它是有效的。
    • 188 不是受支持的格式,因此它会生成 NULL

    日期和时间处理已经够难了。我建议:

    1. 明确以避免歧义(23:30:45 之类的内容非常清晰,188 可以解释)。

    2. 不使用VARCHAR 列来存储日期和时间。

    【讨论】:

      猜你喜欢
      • 2023-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 2023-03-26
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      相关资源
      最近更新 更多