在以下情況下,我有一個列欄位:
| 長度(FIELD_NAME) | 數數(*) |
|---|---|
| 6 | 1271 |
| 7 | 81 |
| 5 | 33 |
| 3 | 125 |
| 1 | 12 |
我想規范化這個欄位,使所有行都包含 6 位數字。要求是從右到左,必要時添加前導零。
我想出的解決方案如下:
CASE
WHEN LENGTH(FIELD_NAME) < 6 THEN LPAD(FIELD_NAME, 6, '0')
WHEN LENGTH(FIELD_NAME) > 6 THEN SUBSTR(FIELD_NAME, -6)
ELSE FIELD_NAME
END
是否有更有效(更好)的方法來實作相同的結果?
uj5u.com熱心網友回復:
您可以在前面加上六個零,然后取最后 6 個字符的子字串:
SELECT SUBSTR('000000' || value, -6) as short_field_name
FROM table_name;
其中,對于樣本資料:
CREATE TABLE table_name (value) AS
SELECT '123' FROM DUAL UNION ALL
SELECT '1234' FROM DUAL UNION ALL
SELECT '12345' FROM DUAL UNION ALL
SELECT '123456' FROM DUAL UNION ALL
SELECT '1234567' FROM DUAL UNION ALL
SELECT '12345678' FROM DUAL UNION ALL
SELECT '123456789' FROM DUAL;
輸出:
SHORT_FIELD_NAME 000123 001234 012345 123456 234567 345678 456789
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/461927.html
