2013-07-25 3 views
2

Как я могу извлечь месяц с SQL-запросом в mysql. Формат даты: dd/mm/yyyy.extract month from mysql

MONTH(datecol) = $month // this does not work. 

Однако если изменить формат даты yyyy-mm-dd это работает, но это не вариант.

+1

Почему бы не сделать это? o_o – Brewal

+0

сделать это опцией – Strawberry

+0

Если я сказал, что это не вариант, это не вариант простой. Мы не контролируем поток данных в базу данных только тогда, когда они были написаны. Формат – anonamas

ответ

3

Это выражение будет извлекать часть строки, которая появляется между первой и второй косой чертой.

SUBSTRING_INDEX(SUBSTRING_INDEX('25/07/2013' ,'/',2),'/',-1) 

вернется '07'

Чтобы получить это преобразуется в числовой, добавьте ноль к нему,

SUBSTRING_INDEX(SUBSTRING_INDEX('25/07/2013' ,'/',2),'/',-1) + 0 

возвращает числовое значение 7


ПРИМЕЧАНИЯ

Это выражение будет работать с любым строковым значением, а не только с строками, представляющими допустимую дату в указанном формате. Например:

SUBSTRING_INDEX(SUBSTRING_INDEX('dd/mm/yyyy' ,'/',2),'/',-1) 

вернется 'mm'

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

Если вы намерены подтвердить, что строка представляет действительное значение даты, в указанном формате, то функция STR_TO_DATE() может использоваться для преобразования строки в DATE. Возврат из этого выражения можно использовать в качестве аргумента для любой из функций MySQL, которые принимают аргумент DATE, такой как функция MONTH() в вашем примере вопроса.

4

Вы можете разобрать дату в любом формате в значение даты SQL с помощью str_to_date. Например:

select month(str_to_date('25/07/2013', '%d/%m/%Y')); 
+0

должен быть '% c' за календарный месяц. – mavili

+0

Это кажется более безопасным, чем предложение @ spencer7593, поскольку вы явно определяете формат даты. –

+0

Можно ли испечь это в мой текущий запрос? «SELECT Dest FROM tbldata WHERE site = $ site»; ? – anonamas