Работа со строками в SQL
база какая? ms sql, oracle, mysql?
select substring(Q, charindex('_C', Q) + 1, 2)
mssql, уже выясняли
тогда скорость работы самой функции будет намного менее важной
substring(patindex('%[_]C[0-9]%',Q)+1,Q)
upd. Поправил по замечаниям .
только PATINDEX. А так да, я немного неправильно написал, да и подчеркивание надо в скобки
У меня осталось уточнение:
1. Почему сам символ С не требует квадратных скобок, тогда как всё остальное в них?
2. Как компилятор распознаёт, что запись [0-9] означает именно цифру от 0 до 9, и что если мне нужно будет расширить, например, не до 9, а до 15? Достаточно будет написать [0-15]?
2. Нет [0-9] это 1 любой символ между 0 и 9, если у тебя два числа, то это уже два символа скажем [0-9][0-9], но моё решение предполагает что код всегда из 2-х символов, если он может быть переменной длинны, то нужно более сложное решение.
Оставить комментарий
maximovega
Подскажите, пожалуйста, есть ли "творческий" способ решения, более короткий и не очень загружающий сервер?Изначально был запрос величин a, b, c и кода вида C1 или C2, который находился после знака подчёркивания в длинной строчке, более того, после подчёркивания мог идти только такой подкод. Эти два символа занимали либо пятую и шестую, либо шестую и седьмую, либо седьмую и восьмую позицию. Вхождение кода единственно. Строки были, например, таковы:
100_C1_/DF, 100V_C2RTE, 300IO_C1PPP
Соответственно, запрос был следующим:
SELECT a, b, c,
CASE WHEN Right(Left(Q,41) = '_' THEN Right(Left(Q,62) ELSE
CASE WHEN Right(Left(Q,51) = '_' THEN Right(Left(Q,72) ELSE
Right(Left(Q,82)
END
END AS NAME
Теперь подкод может находиться на любом месте (хотя, опять же, после знака подчёркивания). Строки таковы:
100_C1_/DF, 100V_C2RTE, 300IO_C1PPP, EFG/_SD__C1SDLK, SDLJK_CKH_000_C1
Пишу запрос
CASE WHEN Right(Left(Q,41) = '_' THEN
CASE WHEN Right(Left(Q,62) IN ('C1','C2') THEN Right(Left(Q,62) ELSE
CASE WHEN Right(Left(Q,51) = '_' THEN
CASE WHEN Right(Left(Q,72) IN ('C1','C2') THEN Right(Left(Q,72) ELSE
CASE WHEN Right(Left(Q,61)...
Но это совершенно неразумно, пусть я знаю, что подкод будет максимально начинаться на двадцатой позиции. И перегружает сервер.
У меня опыт очень маленький - и решение найти пока не получается. Подскажите, пожалуйста, как можно подправить это красивее?