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

Откуда:
Сообщений: 566
Добрый день!
Необходимо в выборке в столбце наименования оставлять только буквы русские/английские.
Select Name, УбираемВсеКромеБукв(Name) FROM T


Как это сделать, чтобы быстро работало? Спасибо.
29 мар 17, 12:08    [20345553]     Ответить | Цитировать Сообщить модератору
 Re: Как оставить в строке только буквы  [new]
aleksrov
Member

Откуда:
Сообщений: 948
Lexx_SQL,

http://stackoverflow.com/questions/13240298/remove-numbers-from-string-sql-server
29 мар 17, 12:13    [20345574]     Ответить | Цитировать Сообщить модератору
 Re: Как оставить в строке только буквы  [new]
Lexx_SQL
Member

Откуда:
Сообщений: 566
aleksrov,

убирать нужно не только цифры...Оставить ТОЛЬКО БУКВЫ!!!
29 мар 17, 12:20    [20345620]     Ответить | Цитировать Сообщить модератору
 Re: Как оставить в строке только буквы  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
выборка чисел из строки
29 мар 17, 12:26    [20345671]     Ответить | Цитировать Сообщить модератору
 Re: Как оставить в строке только буквы  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Lexx_SQL
aleksrov,

убирать нужно не только цифры...Оставить ТОЛЬКО БУКВЫ!!!
Что выназываете "буквами"?
Есть исчерпывающий список символов? Покажите!
29 мар 17, 12:27    [20345680]     Ответить | Цитировать Сообщить модератору
 Re: Как оставить в строке только буквы  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Lexx_SQL,
А в чем проблема? Берите скрипт по ссылке и допиливайте.
А если вам готовое решение нужно - создайте тему в разделе "Работа". Не забудьте сроки и вознаграждение указать.
29 мар 17, 12:30    [20345702]     Ответить | Цитировать Сообщить модератору
 Re: Как оставить в строке только буквы  [new]
Lexx_SQL
Member

Откуда:
Сообщений: 566
iap,

русские а-я(А-Я),английские a-z(A-Z)
29 мар 17, 12:36    [20345757]     Ответить | Цитировать Сообщить модератору
 Re: Как оставить в строке только буквы  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
iap
Lexx_SQL
aleksrov,

убирать нужно не только цифры...Оставить ТОЛЬКО БУКВЫ!!!
Что выназываете "буквами"?
Есть исчерпывающий список символов? Покажите!

Ну он же написал, LIKE '%[ТОЛЬКО БУКВЫ]%', с повторами, видать очень важные символы...
29 мар 17, 12:37    [20345766]     Ответить | Цитировать Сообщить модератору
 Re: Как оставить в строке только буквы  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Руслан Дамирович
iap
пропущено...
Что выназываете "буквами"?
Есть исчерпывающий список символов? Покажите!

Ну он же написал, LIKE '%[ТОЛЬКО БУКВЫ]%', с повторами, видать очень важные символы...
Китайские иероглифы считаются буквами или нет?
29 мар 17, 12:56    [20345926]     Ответить | Цитировать Сообщить модератору
 Re: Как оставить в строке только буквы  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
SELECT
 T.[Name]
,(
  SELECT SUBSTRING(T.[Name],V.number,1)
  FROM T TT JOIN master.dbo.spt_values V
  ON V.type='P'
  AND V.number BETWEEN 1 AND LEN(TT.[Name])
  AND SUBSTRING(TT.[Name],V.number,1)LIKE'[фбвгдеёжзийклмнопрстуфхцчшщъыьэюяФБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯabcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ]'
  WHERE TT.[Name]=T.[Name]
  ORDER BY V.number
  FOR XML PATH(''),TYPE
 ).value('.','nvarchar(max)') [УбралиВсёКромеБукв]
FROM T;
Только вместо master.dbo.spt_values лучше взять нормальную таблицу с числами.
На худой конец можно сгенерировать множество чисел "на лету"
или пронумеровать выборку из кросс-самоджойна какой-нибудь большой таблицы.
29 мар 17, 13:11    [20346040]     Ответить | Цитировать Сообщить модератору
 Re: Как оставить в строке только буквы  [new]
Lexx_SQL
Member

Откуда:
Сообщений: 566
iap,
Спасибо...
29 мар 17, 13:38    [20346199]     Ответить | Цитировать Сообщить модератору
 Re: Как оставить в строке только буквы  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
А знаете, раз в результат попадут только нормальные буквы,
то можно чуть проще и эффективнее:

SELECT
 T.[Name]
,(
  SELECT SUBSTRING(T.[Name],V.number,1)
  FROM T TT JOIN master.dbo.spt_values V
  ON V.type='P'
  AND V.number BETWEEN 1 AND LEN(TT.[Name])
  AND SUBSTRING(TT.[Name],V.number,1)LIKE'[фбвгдеёжзийклмнопрстуфхцчшщъыьэюяФБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯabcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ]'
  WHERE TT.[Name]=T.[Name]
  ORDER BY V.number
  FOR XML PATH('')
 ) [УбралиВсёКромеБукв]
FROM T;
29 мар 17, 13:53    [20346300]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить