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

Откуда: Москва
Сообщений: 46833
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

Откуда: Москва
Сообщений: 46833
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

Откуда: Москва
Сообщений: 46833
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
Сообщений: 5486
вот так повеселее будет
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

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

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

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

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

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

Да:
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]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
А что оптимальней?
Guest
iap
9829428

Что всё же оптимальней? Код по ссылке с for xml path(''), или приведенный выше с конкатенацией substring в запросе к master..spt_values?
19 сен 12, 04:38    [13185926]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6718
Всегда смотрите в сторону декларативности, этот топик с императивщиной больше не подымайте.
Иперативщину нельзя inline-ом подставить в запрос, следовательно жутко неудобно использовать и тормознуто.
Это же очевидно, вы смысл должны понять, ибо даже если кто-то скажет A лучше Б, то не факт что вы этим гвозди не будете забивать сводя всё на нет.
19 сен 12, 10:48    [13186927]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6718
Долбаный гуманитарий
Mnior
Иперативщину нельзя inline-ом подставить в запрос, следовательно жутко неудобно использовать и тормознуто.
Я кое что не понял, но я ни в коем случае не задам лишний вопрос, я же гуманитарий.
В основном же понятно. Ща сделаю скалярку для FOR XML Path('')
FacePalm.JPG
19 сен 12, 10:53    [13186974]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
iap
Member

Откуда: Москва
Сообщений: 46833
Mnior
Долбаный гуманитарий
пропущено...
Я кое что не понял, но я ни в коем случае не задам лишний вопрос, я же гуманитарий.
В основном же понятно. Ща сделаю скалярку для FOR XML Path('')
FacePalm.JPG
Я что-то не вижу пост, который в цитате про скалярку!
Я ослеп??
19 сен 12, 10:59    [13187034]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6718
Рефлекс, сразу отвечаю на последующую ситуацию.

PS: Не спрашивайте у мастера запутать людей.
19 сен 12, 14:40    [13189362]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: удалить все символы из строки кроме цифр  [new]
BoykoSlava
Member

Откуда: Санкт-Петербург
Сообщений: 36
TRIM( TRANSLATE (@N,'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯABCDEFGHIJKLMNOPQRSTUVXYZ',' '))
11 сен 19, 00:55    [21968176]     Ответить | Цитировать Сообщить модератору
 Re: удалить все символы из строки кроме цифр  [new]
iap
Member

Откуда: Москва
Сообщений: 46833
BoykoSlava
TRIM( TRANSLATE (@N,'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯABCDEFGHIJKLMNOPQRSTUVXYZ',' '))
А если в строке есть символ, не являющийся ни цифрой, ни буквой?
11 сен 19, 11:15    [21968373]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Microsoft SQL Server Ответить