Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MSSQL вытащить из строки число / 25 сообщений из 30, страница 1 из 2
05.07.2012, 13:57
    #37867566
НадеждаМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL вытащить из строки число
Доброго дня уважаемы форумчане. Как мне вытащить число из заданной строки? Допустим есть строка "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
05.07.2012, 14:00
    #37867572
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL вытащить из строки число
А 4, 20, 2, 6, 1 - это разве не числа ? Чем они хуже 21 ?
...
Рейтинг: 0 / 0
05.07.2012, 14:03
    #37867580
НадеждаМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL вытащить из строки число
Glory,

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

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

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


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

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

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

Код: 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
05.07.2012, 15:09
    #37867734
НадеждаМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL вытащить из строки число
_ч_, Спасибо за совет, попробую.
...
Рейтинг: 0 / 0
05.07.2012, 15:26
    #37867785
НадеждаМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL вытащить из строки число
НадеждаМ,

собрала вот что-то. Не уверена на все 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
05.07.2012, 16:37
    #37867978
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL вытащить из строки число
Код: 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
05.07.2012, 16:52
    #37868009
НадеждаМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL вытащить из строки число
iap,

Попробовала. если между 21и "дн." нет пробела, то получается в итоге "21д".
...
Рейтинг: 0 / 0
05.07.2012, 16:55
    #37868015
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSQL вытащить из строки число
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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MSSQL вытащить из строки число / 25 сообщений из 30, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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