mysql time_format функция quration - PullRequest
       35

mysql time_format функция quration

0 голосов
/ 03 января 2019

Я вставляю и обновляю функцию 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 голосов
/ 03 января 2019

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)

Правила :

MySQL распознает значения ВРЕМЕНИ в следующих форматах:

  • В виде строки в формате «ЧЧ: ММ: СС».Вы также можете использовать один из следующих «смягченных» синтаксисов: «ЧЧ: ММ: СС», «ЧЧ: ММ», «Д ЧЧ: ММ», «Д ЧЧ» или «СС».Здесь D представляет дни и может иметь значение от 0 до 34.

  • В виде строки без разделителей в формате «ЧЧММСС», при условии, что она имеет смысл как время.Например, «101112» понимается как «10: 11: 12», но «109712» является недопустимым (имеет бессмысленную мелкую часть) и становится «00: 00: 00».

  • Как число в формате ЧЧММСС, при условии, что оно имеет смысл как время.Например, 101112 понимается как «10: 11: 12».Также понятны следующие альтернативные форматы: SS, MMSS или HHMMSS.

В этом случае применяется № 3:

  • 55отображается как SS, поэтому он действителен.
  • 188 - не поддерживаемый формат, поэтому он создает NULL.

Обработка даты и времени уже достаточно сложна.Я предлагаю:

  1. Будьте явными, чтобы избежать двусмысленности (что-то вроде 23:30:45 кристально ясно, 188 открыто для интерпретаций).

  2. Не используйте VARCHAR столбцы для хранения даты и времени.

0 голосов
/ 03 января 2019

Time_Format не все целые числа действительны ..

188 больше не является действительным временем

Даже там, где вы его разместили:

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

Как вы думаете, 188 является действительным временем Hour, Minute, Second?

...