如果长度在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 ]
答案 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
感谢。