Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как выделить число из строки ?  [new]
НаталияГ
Guest
Всем привет. Помогите кто знает, плиз ... есть в SQL какая нить функция которой можно из строки типа "йцу 89цу цууу ." выделить "89" ?
16 дек 02, 09:57    [91294]     Ответить | Цитировать Сообщить модератору
 Re: Как выделить число из строки ?  [new]
Trong
Member

Откуда: Novosibirsk
Сообщений: 759
Вроде как нету. Но написать самому не проблема.
16 дек 02, 10:19    [91324]     Ответить | Цитировать Сообщить модератору
 Re: Как выделить число из строки ?  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145753
Функции такой нет, но на T-SQL это можно сделатьтак:

set nocount on

declare @s varchar(32),@i int,@j int
set @s='йцу 89цу цууу '

set @i=1

while @i<=len(@s)
begin
if (isnumeric(substring(@s,@i,1))=1) break
set @i=@i+1
end

set @j=@i

while @j<=len(@s)
begin
if (isnumeric(substring(@s,@j,1))=0) break
set @j=@j+1
end

select substring(@s,@i,@j-@i)

16 дек 02, 10:25    [91334]     Ответить | Цитировать Сообщить модератору
 Re: Как выделить число из строки ?  [new]
Бронников Андрей
Member

Откуда:
Сообщений: 8
2 Cat

вместо первого цикла можно использовать patindex, меньше писать
16 дек 02, 21:35    [91924]     Ответить | Цитировать Сообщить модератору
 Re: Как выделить число из строки ?  [new]
Axr
Member

Откуда:
Сообщений: 111
Деушка, этим советом пользуйтесь осторожно. Работает только если среди остальных символов нет ".","-","+"
Попробуйте, например, @s='йц-у 89цу цууу '
17 дек 02, 08:22    [92035]     Ответить | Цитировать Сообщить модератору
 Re: Как выделить число из строки ?  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145753
Axr совершенно прав. Я забыл дописать, что эта штуковина выделяет первую похожую на число подстроку.

Если точно известно, что искомое число является целым без знака, то проверку на цифру лучше делать

if patindex('%'+substring(@s,@i,1)+'%','0123456789')<>0
17 дек 02, 09:28    [92066]     Ответить | Цитировать Сообщить модератору
 Re: Как выделить число из строки ?  [new]
mahoune
Member

Откуда: Moscow
Сообщений: 5653
А регулярные выражения прицепить не легче ?! Все удобней будет :)
17 дек 02, 09:53    [92084]     Ответить | Цитировать Сообщить модератору
 Re: Как выделить число из строки ?  [new]
LexusR
Guest
create function NumFromStr(@Str varchar(250)) returns integer
as
begin
declare @index integer,
@num varchar(250)
set @index = 1
set @num = ''
while @index<=len(@Str)
begin
if ((ascii(substring(@Str,@index,1))>=48)and
(ascii(substring(@Str,@index,1))<=57))
set @num = @num+substring(@Str,@index,1)
set @index = @index+1
end
return(cast(@num as integer))
end

select dbo.NumFromStr('йц-у 89цу цууу')
17 дек 02, 11:37    [92187]     Ответить | Цитировать Сообщить модератору
 Re: Как выделить число из строки ?  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145753
mahoune>
Может и легче, но у меня 7.0. Я и UDF использовать не могу

LexusR> попробуйте свой пример на

set @str='йцу 89цу 12цууу '
17 дек 02, 12:41    [92234]     Ответить | Цитировать Сообщить модератору
 Re: Как выделить число из строки ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
declare @s nvarchar(100), @s1 nvarchar(100), @i int

set @s = N'йцу 89цу цууу '

set @i = patindex('%[1234567890]%', @s)
if @i > 0 set @s1 = substring(@s, @i, 4000)

set @i = patindex('%[^1234567890]%', @s1)
if @i > 0 set @s1 = left(@s1, @i-1)
select @s1


Теоритически все это можно загнать в одно выражение
17 дек 02, 14:47    [92382]     Ответить | Цитировать Сообщить модератору
 Re: Как выделить число из строки ?  [new]
Axr
Member

Откуда:
Сообщений: 111
2 Glory - не будет работать с отрицательными и дробными
НаталияГ Картинка с другого сайта.
Если Вас это еще интересует, уточнили бы- что за числа(плюс/минус/десятичная точка), сколько их там в строке, и вообще - о чем речь? М.б. надо из строки убрать все НЕ ЦИФРЫ? Трудно догадаться.
17 дек 02, 15:27    [92439]     Ответить | Цитировать Сообщить модератору
 Re: Как выделить число из строки ?  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145753
Да она давно уже все выбрала, и теперь отдыхает.
17 дек 02, 15:32    [92451]     Ответить | Цитировать Сообщить модератору
 Re: Как выделить число из строки ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
2Axr
согласен, но в строке вроде 'й.цу-89.цу цууу ' по-моему невозможно точно сказать относятся ли симовлы '-' и '.' к символьной части или к числовой
17 дек 02, 15:53    [92493]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как выделить число из строки ?  [new]
andrrrey
Member

Откуда:
Сообщений: 8
regexp_replace(строка,'[^[[:digit:]]]*')
16 сен 16, 09:04    [19671591]     Ответить | Цитировать Сообщить модератору
 Re: Как выделить число из строки ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
andrrrey
regexp_replace(строка,'[^[[:digit:]]]*')

Акелла промахнулся
16 сен 16, 09:06    [19671601]     Ответить | Цитировать Сообщить модератору
 Re: Как выделить число из строки ?  [new]
Добрый Э - Эх
Guest
andrrrey
regexp_replace(строка,'[^[[:digit:]]]*')
осталось подождать ещё 14 лет, пока в MS SQL реализуют эту функцию...
16 сен 16, 10:13    [19671987]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить