首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 判斷欄位是否全為數字的 SQL 技巧

     編輯:Oracle 資料庫相關知識

核心邏輯:TRANSLATE + NVL2 組合

利用 TRANSLATE 移除所有數字字元,若結果為空字串則表示原值純數字;再搭配 NVL2 產生判斷標籤。

實用查詢範例

SELECT NVL2(
         TRANSLATE(name, '1234567890 ', ''),
         'is characters',
         'is number'
       ) AS col_type
FROM   customer_info
WHERE  NVL2(
         TRANSLATE(name, '1234567890 ', ''),
         'is characters',
         'is number'
       ) = 'is number';

函數解析

  • TRANSLATE(expr, from_str, to_str):將 from_str 中的字元一一對應替換為 to_str;若 to_str 為空字串,則直接移除 from_str 中的所有字元。
  • NVL2(expr1, expr2, expr3):expr1 不為 NULL 回傳 expr2,否則回傳 expr3。此處 TRANSLATE 若移除數字後非空(含非數字字元),回傳 'is characters';若為空(純數字),回傳 'is number'。

進階應用:過濾非數字資料

-- 找出含非數字字元的列
SELECT * FROM customer_info
WHERE TRANSLATE(name, '1234567890 ', '') IS NOT NULL;

效能提示

若資料量大,建議在該欄位建立函數索引:

CREATE INDEX idx_cust_name_numchk
  ON customer_info (TRANSLATE(name, '1234567890 ', ''));
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved