2016-12-09 3 views
1

Итак, что я пытаюсь сделать, это вычитать количество недель с даты, просто, правильно?MySQL не конвертирует строку в int, несмотря на то, что ее отличает

Однако запрос возвращает строку, на которую я верю, потому что, как бы я ни старался ее сортировать, она по-прежнему сортируется в следующем порядке: 0, 1, 10, 11, 12, ... 19, 2, 21

Конечно, у меня есть googled, я уже пробовал CAST AS SIGNED/UNSIGNED/INT/DECIMAL. Я попытался форматировать его, умножить на один, добавить нуль к результату - ничего не происходит.

Я использую свой запрос в BIRT - поскольку мне удалось его отсортировать в таблице BIRT, он по-прежнему подвергается скрупулезности в диаграммах Workbench и BIRT - и это делает их похожими на ерунду.

Теперь, когда я пишу этот пост Я понимаю, что проблема в том, что у меня есть случае:

SELECT, случай, когда 2 = 1 ТОГДА SUBSTR (MyDate, 1, 7) ИНАЧЕ CAST (Неделя (MyDate, 0) AS SIGNED) END AS 'data' FROM mytable

Ещё: почему CAST не работает, когда он сопровождается CASE, который может возвращать строку? Я хотел бы условно разрешить пользователям выбирать, сгруппированы ли данные по ГГГГ-ММ (год и месяц) ИЛИ по неделям, теперь кажется, что я застрял.

ответ

0

Это отличное (CAST(WEEK(mydate, 0) AS SIGNED)) выглядит ненужным для меня с week() Функция возвращает номер недели в INT. Таким образом, вероятно, можно привести результат week() к varchar поскольку substring приведет к varchar

CASE WHEN 2 = 1 THEN SUBSTR(mydate, 1, 7) ELSE CAST(WEEK(mydate, 0) AS CHAR(100)) END AS data 
FROM mytable 
+0

Это моя проблема, когда я использую версию, она сортирует числа в «строки типа» порядок, так что 0, 1, 10 и так далее. Похоже, что использование НЕДЕЛИ с CASE не возвращает номер. – Marcin

+0

@ Марцин, хм ... см. Редактирование в ответ, если это помогает. – Rahul

+0

VARCHAR недействителен. Исходя из этого: http://dev.mysql.com/doc/refman/5.7/ru/cast-functions.html#function_convert Я пробовал с CHAR/NCHAR, к сожалению без радостного en - потому что они возвращают строки. – Marcin