如何从 SQL 中的列中删除罗马字母和数值
How to remove Roman letter and numeric value from column in SQL
使用SQL服务器,我有一列末尾有数字和罗马数字。如何在不指定位置的情况下单独删除数字?
Job_Title
Data Analyst 2
Manager 50
Robotics 1615
Software Engineer
DATA ENGINEER III
我试过使用这个查询:
SELECT
CASE
WHEN PATINDEX('%[0-9 ]%', job_title) > 0
THEN RTRIM(SUBSTRING(Job_title, 1, PATINDEX('%[0-9 ]%', job_title) - 1))
ELSE JOB_TITLE
END
FROM
my_table
WHERE
PATINDEX('%[0-9]%', JOB_TITLE) <> 0
但我得到的结果是:
Job_Title
Data
Manager
Robotics
您应该删除正则表达式中的 space 字符。所以,新代码应该是
SELECT case when patindex('%[0-9]%', job_title) > 0 then
rtrim(substring(Job_title,1, patindex('%[0-9]%', job_title) - 1))
else
JOB_TITLE
end
from my_table
WHERE PATINDEX('%[0-9]%',JOB_TITLE) <>0
像这样使用 TRANSLATE 函数:
SELECT TRANSLATE(Job_title, '0123456789', ' ') AS JOB_TITLE
from my_table
您可以使用 RTRIM 来完成
我认为您是想删除职位名称末尾的数字,而不是排除结果。因此,正如其他人提到的那样,您需要从正则表达式的括号中删除 space 并将其放在括号前面,表示它与前面的内容分开 space .但我认为您还需要从比较值的右侧删除通配符,以便数字必须位于职位的末尾,例如...
SELECT case when patindex('% [0-9]', job_title) > 0 then
rtrim(substring(Job_title,1, patindex('% [0-9]', job_title) - 1))
else
JOB_TITLE
end
from my_table
但是,您还提到了罗马数字……而且……如果职位名称可以以“X”之类的结尾表示“X”而不是“10”,那就更难了。如果那不可能,您应该可以 [0-9IVXivx]
来替换所有括号内的部分。
使用SQL服务器,我有一列末尾有数字和罗马数字。如何在不指定位置的情况下单独删除数字?
Job_Title |
---|
Data Analyst 2 |
Manager 50 |
Robotics 1615 |
Software Engineer |
DATA ENGINEER III |
我试过使用这个查询:
SELECT
CASE
WHEN PATINDEX('%[0-9 ]%', job_title) > 0
THEN RTRIM(SUBSTRING(Job_title, 1, PATINDEX('%[0-9 ]%', job_title) - 1))
ELSE JOB_TITLE
END
FROM
my_table
WHERE
PATINDEX('%[0-9]%', JOB_TITLE) <> 0
但我得到的结果是:
Job_Title |
---|
Data |
Manager |
Robotics |
您应该删除正则表达式中的 space 字符。所以,新代码应该是
SELECT case when patindex('%[0-9]%', job_title) > 0 then
rtrim(substring(Job_title,1, patindex('%[0-9]%', job_title) - 1))
else
JOB_TITLE
end
from my_table
WHERE PATINDEX('%[0-9]%',JOB_TITLE) <>0
像这样使用 TRANSLATE 函数:
SELECT TRANSLATE(Job_title, '0123456789', ' ') AS JOB_TITLE
from my_table
您可以使用 RTRIM 来完成
我认为您是想删除职位名称末尾的数字,而不是排除结果。因此,正如其他人提到的那样,您需要从正则表达式的括号中删除 space 并将其放在括号前面,表示它与前面的内容分开 space .但我认为您还需要从比较值的右侧删除通配符,以便数字必须位于职位的末尾,例如...
SELECT case when patindex('% [0-9]', job_title) > 0 then rtrim(substring(Job_title,1, patindex('% [0-9]', job_title) - 1)) else JOB_TITLE end from my_table
但是,您还提到了罗马数字……而且……如果职位名称可以以“X”之类的结尾表示“X”而不是“10”,那就更难了。如果那不可能,您应该可以 [0-9IVXivx]
来替换所有括号内的部分。