Поскольку вопрос гласит MySQL , вот решение MySQL :
Очень сложно проверить, является ли поле датой из-за всех возможных форматов даты, которые необходимо учитывать. НО, если вы знаете, что форматы даты поля являются одним из следующих:
'yyyy-mm-dd'
'yyyy-mm-dd hh:mm:ss'
'yyyy-mm-dd whatever'
Этот код поможет вам:
SELECT count(*) FROM `table`
WHERE DATE(STR_TO_DATE(`column`, '%Y-%m-%d')) IS NOT NULL
AND `column` NOT REGEXP '^[0-9\.]+$'
В основном:
- первое условие сообщает вам, является ли дата, но, к сожалению, не исключает числа (например:
DATE(STR_TO_DATE(**1**, '%Y-%m-%d')) = '2001-00-00'
- второй обеспечивает исключение чисел, в результате чего остаются только даты, соответствующие форматам, указанным выше.
Если count(*)
равно >0
, то это дата, если это 0
, это что-то еще.
Примечание
Этот метод работает со строками любого формата даты, если вы заранее знаете, в каком формате они следуют (я знаю, что это не всегда так, но все же полезно). Просто замените формат a priori
в запросе