TSQL Заменить все символы, отличные от a-z / A-Z, на пустую строку - PullRequest
7 голосов
/ 03 марта 2010

Я хотел бы взять поле и заменить все символы, которые не находятся между a-z и A-Z, на "".

Возможно ли это, и если да, то как?

Ответы [ 2 ]

8 голосов
/ 03 марта 2010

Вы можете создать хранимую процедуру CLR для замены регулярного выражения. Вот статья на эту тему: http://weblogs.sqlteam.com/jeffs/archive/2007/04/27/SQL-2005-Regular-Expression-Replace.aspx

Тогда вы могли бы сделать что-то вроде этого:

UPDATE your_table
SET col1 = dbo.RegExReplace(col1, '[^A-Za-z]','');

EDIT: Поскольку CLR не вариант, проверьте эту ссылку, там есть функция dbo.RegexReplace, которая написана на t-sql, а не на CLR. Вы можете использовать эту функцию следующим образом:

Сначала вам нужно запустить это, чтобы включить Ole:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO

Затем создайте функцию dbo.RegexReplace, указанную по указанной мной ссылке.

Тогда вы можете сделать это:

create table your_table(col1 varchar(500))
go

insert into your_table values ('aBCCa1234!!fAkk9943');

update your_table set col1 = dbo.RegexReplace('[^A-Za-z]','',col1,1,1);

select * from your_table

Result:
aBCCafAkk
1 голос
/ 03 марта 2010

Вы можете попробовать создать UDF (пользовательскую функцию), а затем использовать его в своих запросах:

Затем выполните запрос, подобный следующему:

SELECT * FROM myTable WHERE find_regular_expression(myCol, '[^a-zA-Z]')

Похоже, что в более поздних версиях SQL Server, особенно 2008 R2, может быть больше встроенной поддержки через функцию mdq.RegexMatches (часть служб основных данных).

http://msdn.microsoft.com/en-us/library/ee633829(SQL.105).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...