拆分字符串中的数字

Split a number in a string

我有一个名为“站点”的列,其值如下:

Clj2
Cob
Cob2
Abt 234
Abt4
Bani

我只想将字母字符放入新列“站点名称”中,不带数字或空格,这意味着结果应该是这样的:

Clj
Cob
Cob
Abt
Abt
Bani

下面是我检查过的代码...

代码 1:

WHEN TableUser.[site] LIKE '%0%' 
THEN Substring(TableUser.[site],0, CHARINDEX('%0%',TableUser.[site],0))
WHEN TableUser.[site] LIKE '%1%' THEN Substring(TableUser.[site],0, CHARINDEX('%1%',TableUser.[site],0))
WHEN TableUser.[site] LIKE '%2%' THEN Substring(TableUser.[site],0, CHARINDEX('%2%',TableUser.[site],0))
WHEN TableUser.[site] LIKE '%3%' THEN Substring(TableUser.[site],0, CHARINDEX('%3%',TableUser.[site],0))
WHEN TableUser.[site] LIKE '%4%' THEN Substring(TableUser.[site],0, CHARINDEX('%4%',TableUser.[site],0))
WHEN TableUser.[site] LIKE '%5%' THEN Substring(TableUser.[site],0, CHARINDEX('%5%',TableUser.[site],0))
WHEN TableUser.[site] LIKE '%6%' THEN Substring(TableUser.[site],0, CHARINDEX('%6%',TableUser.[site],0))
WHEN TableUser.[site] LIKE '%7%' THEN Substring(TableUser.[site],0, CHARINDEX('%7%',TableUser.[site],0))
WHEN TableUser.[site] LIKE '%8%' THEN Substring(TableUser.[site],0, CHARINDEX('%8%',TableUser.[site],0))
WHEN TableUser.[site] LIKE '%9%' THEN Substring(TableUser.[site],0, CHARINDEX('%9%',TableUser.[site],0))
WHEN CHARINDEX(' ',(TableUser.[site])) >0 THEN Substring(TableUser.[site],0, CHARINDEX(' ',TableUser.[site],0))
ELSE TableUser.[site]
END as [sitename]

代码 2:

CASE
WHEN CHARINDEX('[0-9]',(TableUser.[site])) >0 THEN Substring(TableUser.[site],0, CHARINDEX('[0-9]',TableUser.[site],0))
WHEN CHARINDEX(' ',(TableUser.[site])) >0 THEN Substring(TableUser.[site],0, CHARINDEX(' ',TableUser.[site],0))
ELSE TableUser.[site]
END as [sitename]

**'[0-9]' 也尝试使用 %[0-9]% 或 %[^0-9]% 或 [[:digit:]]

它与“ ”部分 (Abt 234 --> Abt) 一起工作,这没问题, 但不是数字(Cob2 仍然显示为 Cob2

谁能帮帮我? 非常感谢您的支持!

你可以使用translate()

Returns the string provided as a first argument after some characters specified in the second argument are translated into a destination set of characters specified in the third argument.

trim(translate(site, '0123456789', '          '))

trim()是去掉translate

后字符串开头或结尾的任何space

您可以尝试使用正则表达式来匹配除第一个字符以外的所有内容,如下所示:

SELECT CASE WHEN PATINDEX('%[^A-Za-z]%', site) = 0 
            THEN site
            ELSE SUBSTRING(site, 1, PATINDEX('%[^A-Za-z]%', site)-1)
       END
FROM TableUser

如果字符串中除 char 外没有其他字符,它将 return 字符串原样,否则它会在不同 char 的第一个实例处截断字符串。

模式%[^A-Za-z]%:匹配任何non-alphabetical字符的第一次出现。

试一试here