忽略文本并提取长度为8到12位的数字

时间:2018-05-03 10:14:06

标签: mysql sql

如果长度在8到12位之间,我希望只提取一个数字,否则我希望它是一个空白。但是在数据列中可能有我想要的文本作为空白。

尝试过使用不同的括号可能会改变下面的代码,但是我收到错误

SELECT CASE WHEN
    isnumeric(dbo.worksheet_pvt.MPRNExpected) = 0 THEN '' ELSE(
        CASE WHEN(
            len(dbo.worksheet_pvt.MPRNExpected) >= 8
            AND len(dbo.worksheet_pvt.MPRNExpected) < 13
        ) THEN dbo.worksheet_pvt.MPRNExpected ELSE ''
    END
) AS [ MPRN Expected ]

2 个答案:

答案 0 :(得分:1)

假设您使用的是SQL Server,我建议:

select (case when p.MPRNExpected not like '%[^0-9]%' and
                  len(p.MPRNExpected) between 8 and 12
             then p.MPRNExpected
        end) as MPRN_Expected
       . . .
from dbo.worksheet_pvt p

据推测,您不希望isnumeric(),因为它允许{&#34;号码中的'.''-''e'等字符34。

您的代码存在的问题是您有两个case表达式,并且它们未正确终止。

请注意,在MySQL中,您将使用正则表达式:

select (case when p.MPRNExpected regexp '^[0-9]{8-12}$'
             then p.MPRNExpected
        end) as MPRN_Expected
       . . .
from dbo.worksheet_pvt p

答案 1 :(得分:0)

尝试此查询

SELECT CASE WHEN ISNUMERIC(COLUMN_NAME)=0 THEN '' ELSE 
CASE WHEN (LEN(COLUMN_NAME)>=8 AND LEN(COLUMN_NAME)<13) 
THEN COLUMN_NAME ELSE ''END END AS data FROM TABLE_NAME

感谢。