2012-02-23 2 views
0

Я пытаюсь сделать некоторые значения vchar доступными для поиска на основе даты.MySQL обрезка и строка на сегодняшний день в одном запросе

Струны я должен работать с выглядеть следующим образом:

1/7/2006 12:45:24 AM

1/7/2006 1:18:36 AM

1/7/2006 1:21:43 AM

1/7/2006 1:32:09 AM

3/30/2006 12:32:10 PM

3/30/2006 1:19:30 PM

3/30/2006 1:20:44 PM

Так первый прочь давайте избавиться от AM .. PHPMyAdmin запрос SQL является:

SELECT trim('AM' FROM `orderdate`) FROM tblorders 

Это работает, чтобы избавиться от AM Теперь давайте установим значения в качестве переменной и попытаться обернуть строку str_to_date() вокруг результатов:

SELECT trim('AM' FROM `orderdate`) AS `value`, STR_TO_DATE(`value`,'%d,%m,%Y') FROM tblorders 

Это дает значение как неизвестный столбец. Как еще вы комбинируете два значения функций вместе, чтобы затем использовать их для фильтрации, например, значение WHERE> 2/1/2006?

ответ

1

Вы можете создавать такие функции, как это:

select str_to_date(trim('AM' from orderdate), '%m/%d/%Y') 

Обратите внимание, что я также исправленный свой формат даты в соответствии с вашими данными. Вы на самом деле не нужно обрезать эти значения, чтобы использовать str_to_date на них, только это будет работать нормально:

select str_to_date(orderdate, '%m/%d/%Y') 

Если вы хотите использовать это в вашем ИНЕКЕ затем положить вызовы функций там:

select trim('AM' from orderdate), str_to_date(orderdate, '%m/%d/%Y') 
from your_table 
where str_to_date(orderdate, '%m/%d/%Y') > '2006-01-02' 

и пусть оптимизатор распознает повторение или использовать производную таблицу:

select value, the_date 
from (
    select trim('AM' from orderdate) as value, str_to_date(orderdate, '%m/%d/%Y') as the_date 
    from your_table 
) dt 
where the_date > '2006-01-02' 

Обратите внимание на использование ISO 8601 дат в запросе, что формат является однозначным d любая используемая база данных будет понимать ее независимо от ваших настроек локали.

Я также рекомендую вам исправить вашу схему, чтобы использовать настоящие временные метки вместо этих строк.

+0

Отлично! Благодаря! – Burndog

Смежные вопросы