powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MSSQL вытащить из строки число
25 сообщений из 30, страница 1 из 2
MSSQL вытащить из строки число
    #37867566
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня уважаемы форумчане. Как мне вытащить число из заданной строки? Допустим есть строка "4.20.2.6.1. Реабилитация травматологических больных (21дн.)" Мне нужно из нее получить чисто число 21 без скобок и прочего.

Делаю так, но получаю число начало строки число 4.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
	DECLARE @s nvarchar(255);
	SET @s = ' 4.20.2.6.1.  Реабилитация травматологических больных  (21дн.)'
	-- берем переднюю часть строки, начиная с числа
	SELECT @s = SUBSTRING(@s, PATINDEX('%[0-9]%', @s),LEN(@s));
	-- отсекаем хвост до числа
	SELECT @s = SUBSTRING(@s, 0, PATINDEX('%[^0-9]%',@s));
	-- выводим
	SELECT @s;
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867572
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А 4, 20, 2, 6, 1 - это разве не числа ? Чем они хуже 21 ?
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867580
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glory,

Мне конкретно надо то что в скобках. Остальное не надо.
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867582
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НадеждаММне конкретно надо то что в скобках
Ну так вот и надо наверное сначала вытащить то, что скобках ?
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867583
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И желательно скобки тоже отсечь оставив только 21. Может я шаблон не правильно задаю в patindex....
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867587
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НадеждаМ,

Скобка находится CHARINDEXом.
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867593
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НадеждаМИ желательно скобки тоже отсечь оставив только 21. Может я шаблон не правильно задаю в patindex....Если искать именно круглые скобки, то удобнее charindex, а не patindex
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867597
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо сейчас попробую charindex.
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867601
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НадеждаМ,

кстати, можете словами описать точный алгоритм нахождения скобок?
Ведь пока не факт, что в строке нет других скобок
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867608
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НадеждаММожет я шаблон не правильно задаю в patindex....
Шаблон ищет _первое_ число в строке.
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867619
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap, Вы конечно правы, но пока у мен не встерчается записей с другими скобками в строке. Хотя может быть лучше искать не по скобкам а по сокращению "дн." или "дней ".
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867624
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НадеждаМiap, Вы конечно правы, но пока у мен не встерчается записей с другими скобками в строке. Хотя может быть лучше искать не по скобкам а по сокращению "дн." или "дней ".Ну дык надо сначала определиться.
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867640
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Буду определять по "дн." или "дней".
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867648
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НадеждаМБуду определять по "дн." или "дней".Это не точный алгоритм
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867655
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ясно что не точный, но чтож делать если в оной строке так (21дн.), а в другой (15 дней)...
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867669
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НадеждаМДа ясно что не точный, но чтож делать если в оной строке так (21дн.), а в другой (15 дней)...
Переделать программа так, чтобы пользователь вводил число дней в отдельное, числовое поле
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867678
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glory, пользователь ничего никуда не вводит. Значения берутся из справочника и просто просматирваются на форме. Просто надо количество дней отделить от наименования и вывести в запросе на просмотр в отдельный столбец.
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867682
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НадеждаМGlory, пользователь ничего никуда не вводит. Значения берутся из справочника
А в справочнике они божьим промыслом появлись наверное ?


НадеждаМПросто надо количество дней отделить от наименования и вывести в запросе на просмотр в отдельный столбец.
Ну вот определите точные критерии поиска и реализуйте их.
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867699
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glory,

Справочники нам присылают, затем они закачиваются в базу в таком виде в каком прислали. Пользователи их только смотрят и редактировать не могут.
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867715
_ч_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НадеждаМ,

Ну, если число дней в вашей строке всегда последнее из чисел, тогда можно так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
	

SELECT @s = SUBSTRING(REVERSE(@s), PATINDEX('%[0-9]%', REVERSE(@s)),LEN(@s));
-- отсекаем хвост до числа
SELECT @s = SUBSTRING(@s, 0, PATINDEX('%[^0-9]%',@s));
-- выводим
SELECT REVERSE(@s);
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867734
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_ч_, Спасибо за совет, попробую.
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867785
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НадеждаМ,

собрала вот что-то. Не уверена на все 100% что это правильно.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
	DECLARE @s nvarchar(255);
	SET @s = ' 4.20.2.6.1.  Реабилитация травматологических больных  (21дн.)'

	SELECT @s = SUBSTRING(@s, PATINDEX('%[а-я]%',@s),LEN(@s));
	SELECT @s = SUBSTRING(@s, PATINDEX('%[0-9]%',@s),len(@s));
	SELECT @s = SUBSTRING(@s, 0, PATINDEX('%[а-я]%',@s));

	SELECT @s;
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37867978
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
DECLARE @s nvarchar(255)=N' 4.20.2.6.1.  Реабилитация травматологических больных  (21 дн.)';

SELECT LEFT(s,NULLIF(PATINDEX(N'%[^0-9]%',s),1))
FROM (SELECT STUFF(@s,1,1+LEN(@s)-CHARINDEX(N'(',REVERSE(@s),CHARINDEX(N')',REVERSE(@s))),N''))S(s);
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37868009
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap,

Попробовала. если между 21и "дн." нет пробела, то получается в итоге "21д".
...
Рейтинг: 0 / 0
MSSQL вытащить из строки число
    #37868015
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DECLARE @s nvarchar(255) = N' 4.20.2.6.1. Реабилитация травматологических больных (21дн.)'

Код: sql
1.
2.
SELECT SUBSTRING(@s, sk.s + 1, PATINDEX(N'%[^0-9]%', RIGHT(@s, LEN(@s) - sk.s)) - 1)
FROM(SELECT PATINDEX(N'%(%)%', @s)) sk(s)
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MSSQL вытащить из строки число
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]