Вопрос № 80991: Всем здрасте! Подскажите как написать запрос, чтобы из данных, например 1/124545485(125), вырезать цифры до знака слэш, после слеш до скобки, и саму цифру взять из скобок. То есть чтобы получились в итоге отдельные столбцы :
1 124545485 125<...Вопрос № 80994: Еще раз здрасте! В принципе мой предыдущий вопрос был аналогичный, но пока ответа не было, задам еще один: Как из ФИО (Иванов Иван Иванович) запросом сформировать 3 столбца, чтобы в итоге было:
Familia Name Otchestvo
Иванов Иван Иванович...
Вопрос № 80.991
Всем здрасте! Подскажите как написать запрос, чтобы из данных, например 1/124545485(125), вырезать цифры до знака слэш, после слеш до скобки, и саму цифру взять из скобок. То есть чтобы получились в итоге отдельные столбцы :
1 124545485 125
Количество цифр может варьироваться, т.е. точная длина неизвестна(т.е. функцию substring уже использоват нельзя).
Заранее спасибо!
Отвечает: Ерёмин Андрей
Здравствуйте, Shtuchka007!
В SQL есть все необходимые функции для работы со строками. В данном случае могут понадобиться: LENGTH() - длина строки; LOCATE(A,B) - позиция подстроки A в строке B; LOCATE(A,B,C) - позиция подстроки B в строке A, начиная с позиции C; SUBSTRING(A,B,C) - возвращает подстроку из A, с позиции B до позиции C.
Этого вполне достаточно. Таким образом: SUBSTRING(`str`,1,LOCATE("/",`str`)-1) - 1-ый фрагмент SUBSTRING(`str`,LOCATE("/",`str`)+1,LOCATE("(",`str`)-LOCATE("/",`str`)-1) - 2-ой SUBSTRING(`str`,LOCATE("(",`str`)+1,LOCATE(")",str)-LOCATE("(",`str`)-1) - 3-ий
А вот и запрос целиком: SELECT SUBSTRING(`str`,1,LOCATE("/",`str`)-1) , SUBSTRING(`str`,LOCATE("/",`str`)+1,LOCATE("(",`str`)-LOCATE("/",`str`)-1) , SUBSTRING(`str`,LOCATE("(",`str`)+1,LOCATE(")",str)-LOCATE("(",`str`)-1) FROM `table`
Здесь `table` - таблица, `str` - поле, содержащее это исходное выражение.
Желаю удачи! ---
Дополнение: в SQL Server 2000 вместо функции LOCATE следует использовать CHARINDEX. --------- Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор) Россия, Тула WWW:Программирование на Delphi. Помощь, советы, обмен опытом. ICQ: 286867644 ---- Ответ отправлен: 04.04.2007, 11:08 Оценка за ответ: 4 Комментарий оценки: Выдает ошибку:неизвестный LOCATE. Я использую SQL SERVER 2000
Вопрос № 80.994
Еще раз здрасте! В принципе мой предыдущий вопрос был аналогичный, но пока ответа не было, задам еще один: Как из ФИО (Иванов Иван Иванович) запросом сформировать 3 столбца, чтобы в итоге было:
Отвечает: Ерёмин Андрей
Здравствуйте, Shtuchka007!
Используем те же самые функции (см. вопрос №80991), только здесь всё более запутанно :-) Алгоритм: первая часть вырезается от начала строки до первого пробела; вторая часть - от первого пробела до второго, который в свою очередь ищется точно также, как и первый пробел, только со сдвигом до позиции первого пробела; ну и третья часть - от второго пробела до конца строки. А вот и весь запрос: SELECT
SUBSTRING(`str`,1,LOCATE(" ",`str`)-1) AS NAME1,
SUBSTRING(`str`,LOCATE(" ",`str`),LOCATE(" ",`str`,LOCATE(" ",`str`)+1)-LOCATE(" ",`str`)) AS NAME2,
SUBSTRING(`str`,LOCATE(" ",`str`,LOCATE(" ",`str`)+1),LENGTH(`str`)) AS NAME3
FROM `table`
Желаю удачи! :-) ---
Дополнение: в SQL Server 2000 вместо функции LOCATE следует использовать CHARINDEX. --------- Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор) Россия, Тула WWW:Программирование на Delphi. Помощь, советы, обмен опытом. ICQ: 286867644 ---- Ответ отправлен: 04.04.2007, 11:21 Оценка за ответ: 4 Комментарий оценки: Ошибка: Server: Msg 195, Level 15, State 10, Line 2 'LOCATE' is not a recognized function name.
Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Shtuchka007!
Запросы созданы и проверены на SQL Server 2000.
Обязательно должно быть не менее двух пробелов! ( если в строке два слова, то после первого можно поставить два пробела, если всего одно, то не знаю - скорее всего нужно исправить запрос, хотя тогда еще более запутается ).
У меня таблица Deputat, поле ACName.
В примере 1 для поиска символа используется функция Patindex, для выделения части строки функция Substring, и еще для определения длины строки функция Len.
В примере 2 использована функция CHARINDEX для поиска символа с определенной позиции (практически совпадает с ответом Ерёмина Андрея).
С уважением.
Приложение:
Ответ отправил: Филатов Евгений Геннадьевич (статус: 7-ой класс)
Ответ отправлен: 04.04.2007, 15:55 Оценка за ответ: 5