有没有更有效的方法来标准化字段的字符数?

Is there a more efficient way to normalize the number of characters of a field?

我在以下情况下有一个列字段:

LENGTH(FIELD_NAME) COUNT(*)
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

是否有更有效(更好)的方法来达到相同的结果?

您可以在前面加上六个零,然后取最后 6 个字符的 sub-string:

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<>fiddle here