MySQL str_to_date выдает NULL несмотря на правильное форматирование

Я пытаюсь использовать функцию str_to_date из mysql для преобразования поля TEXT в дату. Сейчас работает:

mysql> select Date from sampleData limit 2;
+--------------+
| Date         |
+--------------+
| "25-01-2012" |
| "25-01-2012" |
+--------------+

показывает, что у нас действительно есть текст. И просто для проверки вот вывод из таблицы описаний:

mysql> describe sampleData;
+--------------------+------------+------+-----+---------+-------+
| Field              | Type       | Null | Key | Default | Extra |
+--------------------+------------+------+-----+---------+-------+
| Colors             | tinyint(4) | YES  |     | NULL    |       |
| Date               | text       | NO   |     | NULL    |       |
+--------------------+------------+------+-----+---------+-------+

Теперь самое смешное, когда я пытаюсь преобразовать это в дату:

mysql> select str_to_date(Date, '%d-%m-%Y') from sampleData limit 2;
+-------------------------------+
| str_to_date(Date, '%d-%m-%Y') |
+-------------------------------+
| NULL                          |
| NULL                          |
+-------------------------------+

О, но str_to_date работает только с типами символов, а не с TEXT. Я подумал, что я сделал приведение, которое дает тот же результат. Что я делаю неправильно?

ОБНОВЛЕНИЕ: в ответ на комментарий

mysql> select AdId, str_to_date(Date, "%d-%m-%Y") from sampleData limit 2;
+----------+-------------------------------+
| AdId     | str_to_date(Date, "%d-%m-%Y") |
+----------+-------------------------------+
| 84065013 | NULL                          |
| 84206047 | NULL                          |
+----------+-------------------------------+

а также

mysql> select AdId, Date from sampleData limit 2;
+----------+--------------+
| AdId     | Date         |
+----------+--------------+
| 84065013 | "25-01-2012" |
| 84206047 | "25-01-2012" |
+----------+--------------+

который показывает, что это те же строки (ID), которые обрабатываются.

1 ответ

Решение

Похоже, у вас там тоже есть эти двойные кавычки. Когда вы пытаетесь конвертировать его с двойными кавычками, вы получаете ноль.

Попробуйте сделать:

select str_to_date(REPLACE(Date,'"',''), '%d-%m-%Y') 
from tab1 sampleData 2;

sqlfiddle demo

Другие вопросы по тегам