[SQL]INT, FLOAT, MONEY使用LEN函數要小心
前言
我們以前有SQL在計算數值的長度是直接使用LEN(AMT),當時因為使用的資料型態為INT。後來資料型態改用FLOAT時,卻發生異常現象! 明明數值長度為7位數,LEN出來卻是12?
研究
先建立測試資料來試一下,
--建立測試的TABLE CREATE TABLE #TBL1 ( COL_INT INT ,COL_FLOAT FLOAT ,COL_MONEY MONEY ); --數值位數由6開始往後增加到10位 INSERT INTO #TBL1 ( COL_INT, COL_FLOAT, COL_MONEY) VALUES ( 123456, 123456, 123456) INSERT INTO #TBL1 ( COL_INT, COL_FLOAT, COL_MONEY) VALUES ( 1234567, 1234567, 1234567) INSERT INTO #TBL1 ( COL_INT, COL_FLOAT, COL_MONEY) VALUES ( 12345678, 12345678, 12345678) INSERT INTO #TBL1 ( COL_INT, COL_FLOAT, COL_MONEY) VALUES ( 123456789, 123456789, 123456789) INSERT INTO #TBL1 ( COL_INT, COL_FLOAT, COL_MONEY) VALUES ( 1234567890, 1234567890, 1234567890) --顯示使用LEN函數出來的值 SELECT LEN(COL_INT) AS COL_INT_LEN , LEN(COL_FLOAT) AS COL_FLOAT_LEN , LEN(COL_MONEY) AS COL_MONEY_LEN --以下全都先轉成字串再計算長度 ,LEN(LTRIM(STR(COL_INT))) AS COL_INT_LEN_S , LEN(LTRIM(STR(COL_FLOAT))) AS COL_FLOAT_LEN_S , LEN(LTRIM(STR(COL_MONEY))) AS COL_MONEY_LEN_S ,* FROM #TBL1
由測試資料發現使用INT資料型態,LEN來看長度都是正確的,但是要小心數值會不會爆,或是需要用到小數點!
FLOAT資料型態,當數值長度大於某個值後,就直接跳到了12。
MONEY資料型態,當數值為123456時,LEN出來的值就為9了!
結論
由上述可以發現,如果要字串的長度,最好還是轉成字串來看會比較準!
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^