2015-02-01 3 views
1

Я новичок в SQL. В настоящее время у меня есть база данных с 4 столбцами: год, месяц, день и сумма денег (месяцы в строчном формате: январь, февраль ...). Кроме того, я разрабатываю базу данных с помощью HeidiSQL.Название месяца сортировки в HeidiSQL

Следовательно, могу ли я спросить, как я могу сортировать столбец месяца в таком порядке, как Jan, Feb, ...? Я попытался использовать SORT BY month, но, похоже, база данных отсортирована по алфавиту.

Пожалуйста, помогите мне, большое спасибо.

+1

«* месяцев в формате строки *» - не делайте этого. Никогда не храните даты (или цифры) в качестве столбцов символов. Измените свою модель, чтобы использовать правильный столбец 'date' для хранения дат, а затем сортировка будет автоматически работать правильно. –

+0

Лучшим решением является использование столбца даты, но если вы не можете его изменить, используйте 'CASE WHEN col = 'Jan' THEN 1' .. и т. Д. – Mihai

+0

Могу ли я попросить, чтобы я просто изменил месяц столбца с типом данных Varchar, а затем как могу ли я отсортировать месяцы сейчас? Я думаю о том, как конвертировать месяц (varchar) в месяц (int), а затем сортировать их, но я понятия не имею, как это сделать. Пожалуйста, помогите мне. – vinh0105

ответ

2

В MySQL, вы можете преобразовать короткое название месяца к datetime с str_to_date:

select str_to_date('Jul', '%b'); 

Вы можете использовать это, чтобы упорядочить по:

order by 
     year 
,  str_to_date(month, '%b') 
,  day 

Example at SQL Fiddle.

+0

Прошу прощения, но ваш метод не работает. Что означает «% b»? Btw, столбец месяца находится в полном формате, т.е. Январь, февраль ... Я использую HeidiSQL, и я пробовал ваш метод, но он не работал, хотя он имеет функцию str_to_date. – vinh0105

+0

Для полного имени месяца попробуйте '% M' вместо'% b'. В [документации] (http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format) имеется полный список спецификаторов формата. – Andomar

+0

Привет, большое спасибо за ответ. Сейчас он работает :) – vinh0105

1

Если вы хотите чтобы быть независимым от настроек интернационализации для сервера MySQL и по-прежнему искать по английским именам месяцев, вы можете использовать field():

order by field(monthcol, 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec') 

Я говорю об этом потому, что %b в str_to_date() управляется языковыми параметрами, поэтому он не всегда будет работать на английском языке названия месяцев. (Параметр, который управляет этим параметром: lc_time_names, описанный here.)

+0

Привет, большое вам спасибо за информацию :), которая мне очень помогает. – vinh0105

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