最近有個需求,要從raw data 資料中判斷某個欄位的值是不是數值,後續再依流程設計往下走;
一般直覺都會使用 ISNUMERIC() 函式來判斷,測試後也覺得沒有問題,直到...
直到踩了一跤,確實使用 ISNUMERIC() 方法大部分情境都可以滿足,而在有條件限制下,進入
資料庫的資料分應該都不可能太髒(應該啦),只是終究會有例外,來自不可抗拒的因素...
這次遇到了情形如下,當資料為「21e4」預期使用 ISNUMERIC() 函式後會判斷為非數值,
即預期回傳值為「0」,但卻回傳「1」
仔細想想,「21e4 」確實在 excel 有看過,大概就等同於 210000 的另外一種表示方式。
而實際上在該系統中這類資料是不應該存在的,於邏輯上也應該需要排除,所以為了達到這個效益
,使用 PATINDEX() 方法來判斷是否有非數字的存在
如上圖所示,「21e4」被判斷有非數字存在,index 為3(起始index 為1),故可以判斷若
回傳為「非0」,則代表該筆 raw data 為「非數值」反之則為數值,後續即可依此為依據
將流程往下帶。
沒有留言:
張貼留言