拆分字符串中的数字
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。
我有一个名为“站点”的列,其值如下:
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
您可以尝试使用正则表达式来匹配除第一个字符以外的所有内容,如下所示:
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。