SQL查询 - 所有字母表的正则表达式模式

时间:2012-01-19 17:53:12

标签: sql database sql-server-2008

我正在使用Microsoft SQL Server 2008。

我想检查从A到Z的所有字母,特殊字符如:“:”和“ - ”表示我表格的一列中的值。

我可以找出“:”和“ - ”。如何计算A到Z之间的值?

我尝试了类似这样的东西,但它没有为我执行替换选项。

INSERT INTO Employee (Name, PhoneNo, Sal) VALUES ('Joe Wang', '666 2323', 222222222);

INSERT INTO Employee (Name, PhoneNo, Sal) VALUES ('John Doe','666 2323', '2G23:22-2' );

UPDATE dbo.Employee

SET Sal = REPLACE(REPLACE(Sal,'-',''), ':', '') 

WHERE Sal LIKE '%:%' OR Sal LIKE '%-%' OR Sal LIKE '%[A-Z]%';

我得到'Sal'值为:222222222和2G23222

字母不会被替换。

我在网上查看了正则表达式模式,并从A到Z获得了所有字母的[A-Z]。我的sql在某处出错吗? 如果我用[0-9]替换它也不起作用。

请帮忙。 谢谢。

2 个答案:

答案 0 :(得分:0)

它失败了,因为您的REPLACE语句不会尝试替换这些字母,并且您无法在REPLACE中使用模式匹配。

您应该尝试不同的方法,而是尝试查找与有效字符(Numbers?)不匹配的任何字符,然后替换该字符。

Here's a blog post that contains a UDF that does just this

CREATE FUNCTION dbo.UFNG_ONLY_DIGITS (@StrVal AS VARCHAR(max))
RETURNS VARCHAR(max)
AS
BEGIN
      WHILE PATINDEX('%[^0-9]%', @StrVal) > 0
            SET @StrVal = REPLACE(@StrVal,
                SUBSTRING(@StrVal,PATINDEX('%[^0-9]%', @StrVal),1),'')
      RETURN @StrVal
END

然后您可以将更新语句写为:

UPDATE dbo.Employee
SET Sal = dbo.UFNG_ONLY_DIGITS (Sal)
WHERE PATINDEX('%[^0-9]%', Sal) > 0

这不是一种非常有效的方法,但如果这只是一次性清理,我认为不应该是一个问题。

答案 1 :(得分:0)

在您的查询中使用REGEXP[:alpha],例如

UPDATE dbo.Employee SET Sal = REPLACE(REPLACE(Sal,'-',''), ':', '')     
             WHERE Sal LIKE '%:%' OR Sal LIKE '%-%' OR Sal REGEXP '[:alpha]';

<强> DOCUMENTATION ,希望这会对你有所帮助