首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 数据库字符处理实战技巧:去空格、填充、大小写、替换

     編輯:Oracle 資料庫基礎

一、去除尾部空格:RTRIM / TRIM

问题:应用未校验导致「DT001 」与「DT001」视为不同值,查询/更新失效。

-- 仅去尾部空格
SELECT RTRIM(PRODUCT_ID) FROM PRODUCTS;

-- 兼容写法:去首尾空格
SELECT TRIM(PRODUCT_ID) FROM PRODUCTS;

-- UPDATE 修正存量脏数据
UPDATE PRODUCTS SET PRODUCT_ID = RTRIM(PRODUCT_ID);

LTRIM(str, chars) 可指定去除字符集,默认去空格。

二、头部填充与定长格式化:LPAD / RPAD

场景:原 5 位产品编码扩展为 6 位,按类别在前缀填充「B/包装、C/客供、F/辅料」。

-- 在左侧填充 'F' 至长度 6
SELECT LPAD(PRODUCT_ID, 6, 'F') FROM PRODUCTS
WHERE CATEGORY = '辅料';

-- 截取首字符作为分类代码(长度大于目标长度时从右截取)
SELECT RPAD(PRODUCT_ID, 1) FROM PRODUCTS;  -- 等同 SUBSTR(PRODUCT_ID,1,1)

RPAD(str, len, pad) 右侧填充,LPAD 左侧填充,均可用于报表定宽显示。

三、大小写标准化:UPPER / LOWER / INITCAP

函数效果典型场景
UPPER(str)全大写产品编码、代码值统一大写
LOWER(str)全小写邮箱地址、URL 归一化
INITCAP(str)每词首字母大写,其余小写英文人名、地址规范化 (按空格/标点分词)
-- 批量修正存量数据
UPDATE PRODUCTS SET PRODUCT_ID = UPPER(PRODUCT_ID)
WHERE PRODUCT_ID != UPPER(PRODUCT_ID);

四、复杂字符串替换:REPLACE 与组合用法

场景:行政区划变更「下沙市」→「下沙区」,仅替换地址字段中该片段。

UPDATE CUSTOMERS
SET ADDRESS = REPLACE(ADDRESS, '下沙市', '下沙区')
WHERE ADDRESS LIKE '%下沙市%';

进阶组合:产品编码「PSD001」→ 报表显示「成批-手动工具-001」

SELECT
    DECODE(SUBSTR(PROD_CODE,1,1), 'P', '成批', '其它') || '-' ||
    DECODE(SUBSTR(PROD_CODE,2,2), 'SD', '手动工具', 'ZD', '自动工具', '其它') || '-' ||
    SUBSTR(PROD_CODE,4) AS DISPLAY_NAME
FROM PRODUCTS;

或使用 CASE / REGEXP_REPLACE (10g+) 实现更灵活的模式替换。

五、性能提示

  • 函数作用于索引列会导致索引失效(如 WHERE UPPER(COL) = 'ABC'),建议创建函数索引:CREATE INDEX IDX_UPPER_COL ON TBL(UPPER(COL))。
  • 大批量 UPDATE 建议分批提交,避免 UNDO 表空间爆涨与长锁。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved