powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подавить ошибку: [22001][1292] Data truncation: Incorrect datetime value:
9 сообщений из 9, страница 1 из 1
Подавить ошибку: [22001][1292] Data truncation: Incorrect datetime value:
    #39670456
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно сабж - "КАК"?

Задача, вырезать из текстового поля 2 даты по предваряющему ключу и сохранить как отдельные поля к этой же записи. Формат дат "какой попало", типа dd/mm/yyyy, dd-mm-yyyy, то есть разделителем может быть несколько символов, и даты могут быть даже такие dd/m/yy.

В общем сделал упрощенный вариант, который часть дат не находит и в запросе
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT id,
  @pos:=LOCATE('Срок действия финансового обеспечения', paymentInfo) AS pos,
  @len:=CHAR_LENGTH('Срок действия финансового обеспечения с: ') AS len,
  @fromDay:=SUBSTRING(paymentInfo, @pos + @len, 2) AS finFromDay,
  @fromMonth:=SUBSTRING(paymentInfo, @pos + @len+3, 2) AS finFromMonth,
  @fromYear:=SUBSTRING(paymentInfo, @pos + @len+6, 4) AS finFromYear,
  DATE(CONCAT_WS("-", @fromYear, @fromMonth, @fromDay)) AS finFromDate,
  @toDay:=SUBSTRING(paymentInfo, @pos + @len + 14, 2) AS finToDay,
  @toMonth:=SUBSTRING(paymentInfo, @pos + @len + 17, 2) AS finToMonth,
  @toYear:=SUBSTRING(paymentInfo, @pos + @len + 20, 4) AS finToYear,
  DATE(CONCAT_WS("-", @toYear, @toMonth, @toDay)) AS finToDate
FROM
  myTable
;


Не распознанные даты вполне нормально выходят как NULL
Однако, как только преобразую запрос в UPDATE получаю эту ошибку.

Как подавить неправильную текстовку дат и заменить на NULL значения? (давно не возился с парсингом текстов на скуле)
...
Рейтинг: 0 / 0
Подавить ошибку: [22001][1292] Data truncation: Incorrect datetime value:
    #39670463
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
UPDATE 
  myTable AS p
  JOIN (
SELECT id,
  @pos:=LOCATE('Срок действия финансового обеспечения', paymentInfo) AS pos,
  @len:=CHAR_LENGTH('Срок действия финансового обеспечения с: ') AS len,
  @fromDay:=SUBSTRING(paymentInfo, @pos + @len, 2) AS finFromDay,
  @fromMonth:=SUBSTRING(paymentInfo, @pos + @len+3, 2) AS finFromMonth,
  @fromYear:=SUBSTRING(paymentInfo, @pos + @len+6, 4) AS finFromYear,
  DATE(CONCAT_WS("-", @fromYear, @fromMonth, @fromDay)) AS finFromDate,
  @toDay:=SUBSTRING(paymentInfo, @pos + @len + 14, 2) AS finToDay,
  @toMonth:=SUBSTRING(paymentInfo, @pos + @len + 17, 2) AS finToMonth,
  @toYear:=SUBSTRING(paymentInfo, @pos + @len + 20, 4) AS finToYear,
  DATE(CONCAT_WS("-", @toYear, @toMonth, @toDay)) AS finToDate
FROM myTable
       ) AS t ON t.id = p.id
SET
  p.finFromDate=t.finFromDate, p.finTODate=t.finToDate
;


Несмотря на то, что отдельно взятый SELECT отрабатывает без сообщений об ошибке, заменяя кривые даты на NULL ..

Можно ли что-то сделать или только "ручками" (на клиенте)?
...
Рейтинг: 0 / 0
Подавить ошибку: [22001][1292] Data truncation: Incorrect datetime value:
    #39670571
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите описания этих полей в DDL таблицы.
...
Рейтинг: 0 / 0
Подавить ошибку: [22001][1292] Data truncation: Incorrect datetime value:
    #39670608
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

В таблице много полей, но работа ведется над одним полем: paymentInfo оно типа text.

Добавление дат происходит в поля, добавленные в таблицу так:
Код: sql
1.
2.
ALTER TABLE `myTable` ADD COLUMN `finFromDate` DATE DEFAULT NULL COMMENT 'фин.огр_с' AFTER `idStatus`;
ALTER TABLE `myTable` ADD COLUMN `finToDate`   DATE DEFAULT NULL COMMENT 'фин.огр_по' AFTER `finFromDate`;
...
Рейтинг: 0 / 0
Подавить ошибку: [22001][1292] Data truncation: Incorrect datetime value:
    #39670611
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.

В общем вопрос решил на клиенте, но осталось непонятным как подавлять такую ошибку .. интересно на будущее.

Самое забавное, что отдельно взятый SELECT (подзапрос) никаких ошибок не выдает, а честно отдает NULL там где не смог преобразовать в дату или там где оказалось @pos = 0. Вставка такой проверки в запрос устраняет часть ошибок, но только часть.. кривые форматы дат все равно выдают эту ошибку.
...
Рейтинг: 0 / 0
Подавить ошибку: [22001][1292] Data truncation: Incorrect datetime value:
    #39670620
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109осталось непонятным как подавлять такую ошибкуЕсли учесть, что сообщения об ошибках специально придуманы именно для того, чтобы о них стало известно и на них можно было реагировать, то становится понятно, что надо не подавлять ошибку, а исправлять код так, чтобы она не возникала. Самое простое в данном случае решение - после преобразования проверить полученное значение на соответствие шаблону даты (RLIKE подойдёт), и в зависимости от хотелок либо обновлять только теми записями, которые прошли эту проверку, либо не прошедшие проверку значения явно заменять на NULL.
...
Рейтинг: 0 / 0
Подавить ошибку: [22001][1292] Data truncation: Incorrect datetime value:
    #39670621
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Спасибо, в общем-то это тоже один из способов "подавления" .., что и было интересно. :)
...
Рейтинг: 0 / 0
Подавить ошибку: [22001][1292] Data truncation: Incorrect datetime value:
    #39670622
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну то есть
Код: sql
1.
SET p.finFromDate=CASE WHEN t.finFromDate RLIKE 'шаблон литерала даты' THEN t.finFromDate ELSE NULL END


или тупо
Код: sql
1.
WHERE t.finFromDate RLIKE 'шаблон литерала даты'
...
Рейтинг: 0 / 0
Подавить ошибку: [22001][1292] Data truncation: Incorrect datetime value:
    #39670623
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109это тоже один из способов "подавления"Нет.
Подавление - ошибка осталась.
Исправление - ошибка устранена.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подавить ошибку: [22001][1292] Data truncation: Incorrect datetime value:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]