Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 удалить все символы из строки кроме цифр  [new]
rank
Member

Откуда:
Сообщений: 2448
Как средствами T-SQL удалить из строки все символы кроме цифр?
5 апр 07, 15:56    [3985526]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
Stimo
Member

Откуда: Leeds
Сообщений: 814
declare @str varchar(50), @str2 varchar(50)
select @str = 'abcd23bb55', @str2 = ''

select @str2 = @str2 + case when substring(@str, number, 1)  like '[0-9]' then substring(@str, number, 1) else '' end
from master..spt_values
where type = 'P' and number <= len(@str) and number <> 0
можно заменить spt_values своей таблицей
5 апр 07, 16:14    [3985671]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
lepton
Member

Откуда: Протвино
Сообщений: 1261
Stimo
declare @str varchar(50), @str2 varchar(50)
select @str = 'abcd23bb55', @str2 = ''

select @str2 = @str2 + case when substring(@str, number, 1)  like '[0-9]' then substring(@str, number, 1) else '' end
from master..spt_values
where type = 'P' and number <= len(@str) and number <> 0
можно заменить spt_values своей таблицей


+ order by number
5 апр 07, 16:19    [3985716]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
iap
Member

Откуда: Москва
Сообщений: 46892
DECLARE @S VARCHAR(100);
SET @S='mjvfge45564368uivf6808976208 976 017896tx 08716t';
WHILE @S LIKE '%[^0-9]%' SET @S=STUFF(@S,PATINDEX('%[^0-9]%',@S),1,'');
SELECT @S;
5 апр 07, 16:32    [3985838]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
rank
Member

Откуда:
Сообщений: 2448
iap
DECLARE @S VARCHAR(100);
SET @S='mjvfge45564368uivf6808976208 976 017896tx 08716t';
WHILE @S LIKE '%[^0-9]%' SET @S=STUFF(@S,PATINDEX('%[^0-9]%',@S),1,'');
SELECT @S;
этот подходит
вариант с master..spt_values может не подойти, если строка слишком длинная
всем спасибо
5 апр 07, 16:47    [3985971]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
iap
Member

Откуда: Москва
Сообщений: 46892
rank
вариант с master..spt_values может не подойти, если строка слишком длинная
всем спасибо
На самом деле этот вариант самый быстрый. А чтобы он работал всегда, создайте специальную таблицу с целыми числами от 0 до, например, 1000000, и используйте её вместо master..spt_values.
5 апр 07, 17:09    [3986142]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
rank
Member

Откуда:
Сообщений: 2448
iap
rank
вариант с master..spt_values может не подойти, если строка слишком длинная
всем спасибо
На самом деле этот вариант самый быстрый. А чтобы он работал всегда, создайте специальную таблицу с целыми числами от 0 до, например, 1000000, и используйте её вместо master..spt_values.
С таблицей на 1млн.записей - это перебор: содавать динамически - долго, держать в базе постоянно - накладно
А самый быстрый вариант - CLR-UDF, если бы не SQL2K.
5 апр 07, 17:24    [3986265]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
iap
Member

Откуда: Москва
Сообщений: 46892
rank
iap
rank
вариант с master..spt_values может не подойти, если строка слишком длинная
всем спасибо
На самом деле этот вариант самый быстрый. А чтобы он работал всегда, создайте специальную таблицу с целыми числами от 0 до, например, 1000000, и используйте её вместо master..spt_values.
С таблицей на 1млн.записей - это перебор
Никакого перебора - такая таблица есть, наверно, у большинства посетителей этого форума. :-))
5 апр 07, 17:29    [3986319]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
Glory
Member

Откуда:
Сообщений: 104764
rank
iap
rank
вариант с master..spt_values может не подойти, если строка слишком длинная
всем спасибо
На самом деле этот вариант самый быстрый. А чтобы он работал всегда, создайте специальную таблицу с целыми числами от 0 до, например, 1000000, и используйте её вместо master..spt_values.
С таблицей на 1млн.записей - это перебор: содавать динамически - долго, держать в базе постоянно - накладно
А самый быстрый вариант - CLR-UDF, если бы не SQL2K.

Про накладно
1 000 000 со стольцов типа int это 4 000 000 байт или около 4Мб места в базе
5 апр 07, 17:38    [3986402]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
Stimo
Member

Откуда: Leeds
Сообщений: 814
rank
iap
rank
вариант с master..spt_values может не подойти, если строка слишком длинная
всем спасибо
На самом деле этот вариант самый быстрый. А чтобы он работал всегда, создайте специальную таблицу с целыми числами от 0 до, например, 1000000, и используйте её вместо master..spt_values.
С таблицей на 1млн.записей - это перебор: содавать динамически - долго, держать в базе постоянно - накладно
А самый быстрый вариант - CLR-UDF, если бы не SQL2K.

???
extended procedures (в 2000 они есть) на порядок быстрее CLR-UDF. другое дело, что деваться некуда.
5 апр 07, 17:46    [3986486]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
rank
Member

Откуда:
Сообщений: 2448
Stimo
???
extended procedures (в 2000 они есть) на порядок быстрее CLR-UDF. другое дело, что деваться некуда.
а в С++ есть классы для работы с регулярными выражениями?
5 апр 07, 17:55    [3986573]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
Stimo
Member

Откуда: Leeds
Сообщений: 814
rank
Stimo
???
extended procedures (в 2000 они есть) на порядок быстрее CLR-UDF. другое дело, что деваться некуда.
а в С++ есть классы для работы с регулярными выражениями?

Не по адресу, но всё же http://www.tropicsoft.com/Components/RegularExpression/. Первый результат в гугле.
К тому же, esp - не обязательно с++.
6 апр 07, 08:33    [3987819]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
rank
Member

Откуда:
Сообщений: 2448
Stimo
rank
Stimo
???
extended procedures (в 2000 они есть) на порядок быстрее CLR-UDF. другое дело, что деваться некуда.
а в С++ есть классы для работы с регулярными выражениями?

Не по адресу, но всё же http://www.tropicsoft.com/Components/RegularExpression/. Первый результат в гугле.
К тому же, esp - не обязательно с++.
по сравнению с решением данной задачи (да и других задач по работе со строками) с помощью CLR или T-SQL использование ESP уж больно хлопотно: библиотеки сторонних производителей, безопасность и надежность кода и т.п. А производительность ESP уж точно не быстрее на порядок.
6 апр 07, 10:00    [3988161]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5487
вот так повеселее будет
DECLARE @S VARCHAR(8000);
SET @S='mjvfge45564368uivf6808976208 976 017896tx 08716t';


declare @i int
select @S=''''+@S+'''', @i=20

while @i<255 
  select @S=case when char(@i) like '[0-9'']' then @S else 'replace('+@S+','''+char(@i)+''','''')' end,
     @i=@i+1

select @S='select '+@S
exec(@S)
в принципе строку с кучей replace можно сохранить и вызывать в запросе
6 апр 07, 11:00    [3988639]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
rank
Member

Откуда:
Сообщений: 2448
SergSuper
вот так повеселее будет
DECLARE @S VARCHAR(8000);
SET @S='mjvfge45564368uivf6808976208 976 017896tx 08716t';


declare @i int
select @S=''''+@S+'''', @i=20

while @i<255 
  select @S=case when char(@i) like '[0-9'']' then @S else 'replace('+@S+','''+char(@i)+''','''')' end,
     @i=@i+1

select @S='select '+@S
exec(@S)
в принципе строку с кучей replace можно сохранить и вызывать в запросе
прикольный метод, 5+!
6 апр 07, 11:36    [3988946]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
Абориген
Member

Откуда:
Сообщений: 355
rank
прикольный метод, 5+!
но о-о-о-очень медленный :)
6 апр 07, 12:51    [3989624]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
rank
Member

Откуда:
Сообщений: 2448
Абориген
rank
прикольный метод, 5+!
но о-о-о-очень медленный :)
а с чего медленный то?
6 апр 07, 13:47    [3990027]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
Абориген
Member

Откуда:
Сообщений: 355
rank
а с чего медленный то?
Идёт перебор по всем символам ASCII кроме цифр, а большинство из них может в строке отсутствовать, например +7(095)555-09-33; слишком много ненужных конкатенаций. Не работает при наличии в строке апострофа.
Проверьте сами эти методы, просто погоняйте в цикле.
6 апр 07, 17:29    [3991877]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: удалить все символы из строки кроме цифр  [new]
robzi
Guest
спасибки, большое очень выручили
24 янв 12, 14:32    [11960451]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
iap
Member

Откуда: Москва
Сообщений: 46892
9829428
24 янв 12, 14:58    [11960788]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
любознательный гость
Guest
iap
9829428
Хм, любопытный вариантик... А не бага ли это?
24 янв 12, 18:01    [11962981]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5248
любознательный гость
А не бага ли это?

С чего бы? обычный способ конкатенации выборки в одну строку.
24 янв 12, 18:50    [11963327]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
любознательный гость
Guest
Сон Веры Павловны
любознательный гость
А не бага ли это?

С чего бы? обычный способ конкатенации выборки в одну строку.
Хотя бы с того, что я не нашел описания этой своеобразной фичи в документации. Может плохо искал...
24 янв 12, 20:15    [11963800]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5248
любознательный гость
Может плохо искал...

Да:
http://msdn.microsoft.com/en-us/library/ms190922.aspx
If you provide an empty string (FOR XML PATH ('')), no wrapper element is generated

+
http://msdn.microsoft.com/en-us/library/bb510469.aspx
Any column without a name will be inlined. For example, computed columns or nested scalar queries that do not specify column alias will generate columns without any name. If the column is of xml type, the content of that data type instance is inserted. Otherwise, the column content is inserted as a text node.
24 янв 12, 20:56    [11963977]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
любознательный гость
Guest
Сон Веры Павловны, благодарствую.
25 янв 12, 09:35    [11965335]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить