SELECT CASE与正则表达式

时间:2016-06-25 22:50:45

标签: sql-server tsql

我在T-SQL中为SQL Server编写了以下查询

SELECT 
   CASE
      WHEN ADDR_LINE_1 REGEXP '^[0-9]'
      THEN SUBSTRING(ADDR_LINE_1,1,CHARINDEX(' ',ADDR_LINE_1))
      ELSE NULL
   END AS HOUSE_NUMBER
FROM CUSTOMER

我想要的是,如果列ADDR_LINE_1以数字开头,我想从中提取HOUSE_NUMBER。但是现在我的查询给出了一个解析错误。如果我用LIKE替换单词REGEXP,则解析错误消失,但我总是为HOUSE_NUMBER获取NULL。我的查询的正确语法是什么?

2 个答案:

答案 0 :(得分:1)

如何使用LIKE

SELECT 
   CASE
      WHEN ADDR_LINE_1 Like '%[0-9]%'
      THEN SUBSTRING(ADDR_LINE_1,1,CHARINDEX(' ',ADDR_LINE_1))
      ELSE NULL
   END AS HOUSE_NUMBER
FROM CUSTOMER

答案 1 :(得分:1)

您可以像这样使用ISNUMERICLEFT

SELECT
    CASE WHEN ISNUMERIC(LEFT(ADDR_LINE_1, 1)) = 1 
    THEN SUBSTRING(ADDR_LINE_1, 1, CHARINDEX(' ', ADDR_LINE_1))
    ELSE NULL 
    END AS HOUSE_NUMBER
FROM CUSTOMER