[SQL]數值轉字串

  • 123717
  • 0
  • SQL
  • 2012-01-21

[SQL]數值轉字串

最近幫同事查看一個SQL數值轉字串的問題,他說為何轉出來會出現科學記號(e+)出現。

他直接用SELECT CONVERT(varchar, 1234567890.12)又不會出現科學記號(e+)。

查看CONVERT,會有科學記號出來的只有資料型態為FLOAT OR REAL。

查看一下資料表欄位的資料型態果然為float,可是又不能改欄位的資料型態,所以就改使用STR函式來將數值轉含字串。

以下為測試的Code,

--SQL 數值轉字串
DECLARE @f FLOAT, @d MONEY, @i INT 
SET @f = 1234567890.12
SET @d = 1234567890.12
SET @i = 1234567890
SELECT @f as '@f' --1234567890.12
, @d as '@d' --1234567890.12
, @i as '@i' --1234567890 
-- CONVERT
SELECT CONVERT(varchar, @f) as 'CONVERT @f' --1.23457e+009
, CONVERT(varchar, @d) as 'CONVERT @d' --1234567890.12
, CONVERT(varchar, @i) as 'CONVERT @i' --1234567890 
-- CAST
SELECT CAST(@f as varchar) as 'CAST @f' --1.23457e+009
, CAST(@d as varchar) as 'CAST @d' --1234567890.12
, CAST(@i as varchar) as 'CAST @i' --1234567890 
-- LTRIM + STR
SELECT LTRIM(STR(@f)) as 'STR @f' --1234567890 
, LTRIM(STR(@d)) as 'STR @d' --1234567890 
, LTRIM(STR(@i)) as 'STR @i' --1234567890 
, LTRIM(STR(@f, 20, 2)) as 'STR(@f, 20, 2)' --1234567890.12
, LTRIM(STR(@d, 20, 2)) as 'STR(@d, 20, 2)' --1234567890.12

image

從以上可發現如果要順利轉成字串的話,資料型態可使用非FLOAT OR REAL的資料型態,如MONEY OR DECIMAL等等。

如果資料型態已經設定成FLOAT OR REAL的話,要轉成字串,就使用LTRIM + STR來達到目的。

Hi, 

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

請大家繼續支持 ^_^