TSQL用空字符串替换所有非a-z / A-Z字符

时间:2010-03-03 20:15:51

标签: tsql

我想取一个字段,用“”替换不在a-z和A-Z之间的所有字符。

这是可能的,如果是的话,怎么样?

2 个答案:

答案 0 :(得分:8)

您可以创建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]','');

编辑: 由于CLR不是一个选项,请查看this链接,其中有一个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 :(得分:1)

您可以尝试创建UDF(用户定义的函数),然后在查询中使用它:

然后执行类似于以下的查询:

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

通过mdq.RegexMatches函数(主数据服务的一部分),SQL Server的后续版本(当然还有2008 R2)可能会有更多原生支持。

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