我有一個查詢,它給出的輸出如下
select position_id from per_all_people_F
| 位置 ID |
|---|
| FRT567 |
| GFT890 |
| GFT000876 |
| ABC00046 |
我如何確保在前 3 個字母之后,數字必須是 6 位數字。
比如說:
FRT567應該是FRT000567。
GFT890應該GFT000890
或ABC00046應該是ABC000046
如何調整我的查詢以適應此更改?
uj5u.com熱心網友回復:
您可以使用
SELECT SUBSTR(position_id,1,3)||LPAD(REGEXP_REPLACE(position_id,'\D '),6,'0')
FROM per_all_people_F
假設您的資料格式與提供的樣本完全相似。
- 第一部分:前三個字母的普通子串提取
- 第二部分:使用 using 從字串中僅提取數字
REGEXP_REPLACE(),然后將零填充到字串中,最多六個字符 - 然后通過雙管道字符連接碎片
uj5u.com熱心網友回復:
僅使用標準字串函式(無正則運算式) - 在前三個字母后拆分字串并在中間連接所需數量的零。即使沒有數字開頭(整個輸入字串只是三個字母),這也能正常作業。
with
t (position_id) as (
select 'FRT567' from dual union all
select 'GFT890' from dual union all
select 'GFT000876' from dual union all
select 'ABC00046' from dual union all
select 'XQY' from dual
)
select position_id,
substr(position_id, 1, 3) || rpad('0', 9 - length(position_id), '0') ||
substr(position_id, 4) as valid_position_id
from t;
POSITION_ID VALID_POSITION_ID
------------ --------------------
FRT567 FRT000567
GFT890 GFT000890
GFT000876 GFT000876
ABC00046 ABC000046
XQY XQY000000
uj5u.com熱心網友回復:
您可以使用簡單的字串函式并使用 找到前 3 個字符SUBSTR(position_id, 1, 3),然后使用將||其與剩余的字符連接起來,用零填充到長度為 6 LPAD(SUBSTR(position_id, 4), 6, '0')。如果您可以擁有 3 個字符的字串,那么您可以使用它COALESCE來確保始終有 6 個數字:
SELECT position_id,
SUBSTR(position_id, 1, 3) || LPAD(SUBSTR(position_id, 4), 6, '0')
AS expanded_position_id,
-- Optional version for short strings
SUBSTR(position_id, 1, 3)
|| COALESCE(LPAD(SUBSTR(position_id, 4), 6, '0'), '000000')
AS expanded_position_id2
FROM per_all_people_F
其中,對于樣本資料:
CREATE TABLE per_all_people_F (position_id) as
SELECT 'FRT567' FROM DUAL UNION ALL
SELECT 'GFT890' FROM DUAL UNION ALL
SELECT 'GFT000876' FROM DUAL UNION ALL
SELECT 'ABC00046' FROM DUAL UNION ALL
SELECT 'ABC' FROM DUAL;
輸出:
POSITION_ID EXPANDED_POSITION_ID EXPANDED_POSITION_ID2 FRT567 FRT000567 FRT000567 GFT890 GFT000890 GFT000890 GFT000876 GFT000876 GFT000876 ABC00046 ABC000046 ABC000046 美國廣播公司 美國廣播公司 ABC000000
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/385719.html
