如何从 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] 来替换所有括号内的部分。