[SQL]INT, FLOAT, MONEY使用LEN函數要小心

[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

 

image

由測試資料發現使用INT資料型態,LEN來看長度都是正確的,但是要小心數值會不會爆,或是需要用到小數點!

FLOAT資料型態,當數值長度大於某個值後,就直接跳到了12。

MONEY資料型態,當數值為123456時,LEN出來的值就為9了!

結論

由上述可以發現,如果要字串的長度,最好還是轉成字串來看會比較準!

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^