mysql time_format函数问题

时间:2019-01-03 09:06:46

标签: mysql time-format

我插入并更新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')

2 个答案:

答案 0 :(得分:1)

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

188不再是有效时间

即使放在它的位置:

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

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

答案 1 :(得分:0)

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列来存储日期和时间。