利用 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 ', ''));