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

标签 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] 也不起作用。

请帮忙。 谢谢。

最佳答案

失败是因为您的 REPLACE 语句没有尝试替换字母,并且您不能在 REPLACE 中使用模式匹配。

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

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

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

关于SQL 查询 - 所有字母表的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8930877/

相关文章:

database - 在 SQL Azure 上使用 EF6 MainContextDropInitializer 时超时

php - 为什么此 PHP 代码不会将数据添加到 MySQL 数据库?

sql-server - 是否可以镜像 SQL Server 2008 和 SQL Server 2008R2 数据库?

sql - 将所选列从 CSV 文件导入到 SQL Server 表

mysql - 如何从数据库中选择高于确切数字的数据

php - 如何按数据库中的两列分组?

sql server打印一个注册表,从您的初始日期开始直到您的最终日期

php - MySQL 双等号

sql-server - 在时间延迟后从触发器执行存储过程

mysql - 无法找出正确的 SQL 语句