使用 SQL Server,我在最后有一列帶有數字和羅馬數字。如何在不指定位置的情況下單獨洗掉數字?
| 職稱 |
|---|
| 資料分析師 2 |
| 經理 50 |
| 機器人1615 |
| 軟體工程師 |
| 資料工程師 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
但我得到的結果是:
| 職稱 |
|---|
| 資料 |
| 經理 |
| 機器人技術 |
uj5u.com熱心網友回復:
像這樣使用 TRANSLATE 函式:
SELECT TRANSLATE(Job_title, '0123456789', ' ') AS JOB_TITLE
from my_table
可以使用 RTRIM 來完成
uj5u.com熱心網友回復:
您應該洗掉正則運算式中的空格字符。所以,新代碼應該是
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
uj5u.com熱心網友回復:
我認為您正在嘗試從職位名稱的末尾洗掉數字,而不是排除結果。因此,正如其他人所提到的,您需要從正則運算式的括號中洗掉空格并將其放在括號前面,以表示它與前面的內容用空格隔開。但是我認為您還需要從比較值的右側洗掉通配符,以便數字必須位于職位名稱的末尾,例如...
當 patindex('% [0-9]', job_title) > 0 時選擇 case
rtrim(substring(Job_title,1, patindex('% [0-9]', job_title) - 1))
別的
職稱
結尾
來自 my_table
但是,您還提到了羅馬數字……并且……如果職位名稱可能以“ X”之類的結尾表示“ X”而不是“ 10”,那就更難了。如果這不可能,您應該能夠[0-9IVXivx]替換所有括號中的部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/422048.html
標籤:
下一篇:如何在子查詢中參考系統版本表
