Конвертируем дату в текстовом поле таблицы в формат даты MySQl
Дано: таблица вида
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
mysql> select * from config_common where nameparam like 'dtc-3-%-1' and valueparam<>"" limit 10; +--------+--------------+------------+ | id | nameparam | valueparam | +--------+--------------+------------+ | 3632 | dtc-3-1709-1 | 15.01.2016 | | 4147 | dtc-3-3513-1 | 01.03.2016 | | 343653 | dtc-3-5156-1 | 16.09.2016 | | 343519 | dtc-3-5143-1 | 16.09.2016 | | 343417 | dtc-3-5090-1 | 16.09.2016 | | 342901 | dtc-3-4951-1 | 16.09.2016 | | 342878 | dtc-3-4895-1 | 16.09.2016 | | 342832 | dtc-3-4664-1 | 16.09.2016 | | 342786 | dtc-3-4160-1 | 16.09.2016 | | 342513 | dtc-3-4395-1 | 16.09.2016 | +--------+--------------+------------+ 10 rows in set (0.00 sec) |
Как видим поле valueparam в текстовом виде, да еще не в формате MySQL. А выборка нужна именно по диапазону дат. Решение кроется в использовании функции STR_TO_DATE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
mysql> select *,CONVERT(STR_TO_DATE(valueparam,"%d.%m.%Y"),date) as dt from config_common where nameparam like 'dtc-3-%-1' and valueparam<>"" and CONVERT(STR_TO_DATE(valueparam,"%d.%m.%Y"),date) between "2016-12-01" and "2016-12-31" limit 10; +--------+--------------+------------+------------+ | id | nameparam | valueparam | dt | +--------+--------------+------------+------------+ | 421968 | dtc-3-4059-1 | 13.12.2016 | 2016-12-13 | | 421943 | dtc-3-4452-1 | 13.12.2016 | 2016-12-13 | | 421917 | dtc-3-901-1 | 13.12.2016 | 2016-12-13 | | 421896 | dtc-3-3224-1 | 13.12.2016 | 2016-12-13 | | 421870 | dtc-3-1624-1 | 13.12.2016 | 2016-12-13 | | 421847 | dtc-3-3173-1 | 13.12.2016 | 2016-12-13 | | 421824 | dtc-3-5655-1 | 13.12.2016 | 2016-12-13 | | 421801 | dtc-3-845-1 | 13.12.2016 | 2016-12-13 | | 421778 | dtc-3-3994-1 | 13.12.2016 | 2016-12-13 | | 421743 | dtc-3-871-1 | 13.12.2016 | 2016-12-13 | +--------+--------------+------------+------------+ 10 rows in set (0.03 sec) |