#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть таблица с сообщением об имени столбца, и этот столбец содержит значения в фиксированном формате, как показано ниже.
Форматировать:-
QU FRASELH .CPHBOSK LH/050840 COR MVT
Что мне нужно, так это подсчитать количество сообщений на основе group by по 2-й подстроке (например, FRASELH в приведенном выше случае)
SELECT COUNT(*), ORIGIN_QUEUE
FROM info
where TIME_STAMP >='2016-10-05 00:00:00'and TIME_STAMP<= '2016-10-06 00:00:00'
group by (????)
Заранее спасибо.
Комментарии:
1. Добавьте больше образцов данных и ожидаемый результат.
2. Вы должны указать, на какой СУБД вы работаете (Oracle, MySQL, …), а также что означает «фиксированный формат» в вашем случае? Какие значения фиксированы в примере? В зависимости от этого будет построено решение.
3. @a_horse_with_no_name db — это sql server.
4. @EmilHolub фиксированный формат означает, что значения в каждой ячейке для столбца сообщения имеют одинаковый формат. например, одна ячейка имеет 4 значения (первая подстрока имеет 2 символа _space_2-я подстрока имеет 6 символов_space_ и так далее). теперь этот формат исправлен для всех ячеек в столбце сообщения.
Ответ №1:
@EmilHolub фиксированный формат означает, что значения в каждой ячейке для столбца сообщения имеют одинаковый формат. например, одна ячейка имеет 4 значения (первая подстрока имеет 2 символа _space_2-я подстрока имеет 6 символов_space_ и так далее).теперь этот формат исправлен для всех ячеек в столбце сообщения.
Учитывая, что этого должно быть достаточно для выполнения:
SELECT substr(ORIGIN_QUEUE,4,6) COUNT(*),
FROM info
where TIME_STAMP >='2016-10-05 00:00:00'and TIME_STAMP<= '2016-10-06 00:00:00'
group by substr(ORIGIN_QUEUE,4,6)
Он сгруппирует ваши значения на основе 4-9-го символа в строке ORIGIN_QUEUE .
Комментарии:
1. спасибо вам. Это сработало (просто это должна быть подстрока вместо substr).
2. О, извините, я работаю в основном с базами данных Oracle, я не уверен во всех различиях в языке кода. Рад, что это помогло.