正则表达式不适用于SQL Server 2008

时间:2015-08-10 20:49:35

标签: sql sql-server regex sql-server-2008

我正在尝试编写一些SQL代码(在SQL Server 2008上)以获取列并在单元格符合正则表达式模式时替换条目。基本上,如果列中的单元格具有C12345形式(字母C后跟五位数字),我想放弃C.否则,我想单独留下单元格。这是我尝试过的代码:

UPDATE table1
SET column1 = (
CASE WHEN column1 LIKE 'C[0-9]{5, 5}' THEN SUBSTRING(column1, 1, 5)
ELSE column1
END
);

这不会产生任何错误,但不会影响任何行。

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

我认为你可以表达你想要的东西:

UPDATE table1
    SET column1 = (CASE WHEN column1 LIKE 'C[0-9][0-9][0-9][0-9][0-9]%'
                        THEN SUBSTRING(column1, 2, 5)
                        ELSE column1
                   END);

SQL Server不支持开箱即用的正则表达式。它确实有一个扩展的like。我假设上面的内容是您想要的,尽管您可能希望在%之前C(与您使用的正则表达式更加一致)。

答案 1 :(得分:0)

尝试以下查询:

UPDATE table1
SET column1 = (
CASE WHEN column1 LIKE 'C%' 
AND (ISNULL(TRY_CAST(SUBSTRING(column1,2,100) as INT),-1) BETWEEN 0 AND 99999)
THEN SUBSTRING(column1, 1, 5)
ELSE column1
END
);

<强>哈克: 这里的诀窍是首先检查C作为第一个字母然后检查是否为5位数字。我使用SUBSTRING(column1,2,100)在C之后提取剩余的数字。请注意,100只是非常高的值,所以我从C column1后获得了所有内容。  下一步是使用TRY_CAST转换为INT(如果是数字),否则为-1,其失败范围