關於SQL Server中將數實值型別轉換為字串的問題

來源:互聯網
上載者:User

今天在把一些資料匯入到SQL Server的時候遇到有個列被匯入成float類型,而我實際需要的是varchar類型,所以要進行類型轉換,轉換時遇到了一點問題,所以寫這篇部落格記錄一下。

SQL Server中的數實值型別分為兩種,一種是精確的數實值型別,具體的資料類型有:bit、tinyint、smallint、int、bigint、smallmoney、money和decimal,這些資料類型能夠精確的表明某以數值;另一種是近似的數實值型別,具體就是float和real。浮點數據為近似值,因此,並非資料類型範圍內的所有值都能精確地表示。

有些時候我們需要將這些數實值型別轉換為字串類型,用到的轉換函式就是cast和convert,這兩個函數的作用都是進行類型轉換,只不過文法格式不同。據說在轉換時還是有一定的區別的,不過我個人更習慣於使用convert函數,應該這個函數一方面更像是個函數的文法,另一方面在做時間和數值轉換成字串時還可以指定轉換的格式。

對於精確數值的資料類型,轉換出來的字串就是我們儲存的數值。比如:

declare @i intset @i=123456789
print 'test:'+convert(varchar(20),@i)
輸出就是:test:123456789

而如果對於近似數值的資料類型,那麼可就沒有那麼簡單了。

declare @i floatset @i=123456789
print 'test:'+convert(varchar(20),@i)
輸出結果:test:1.23457e+008

輸出的結果是使用科學計數法來表示的,再看看可否通過指定轉換樣式來指定不使用科學計數法呢?協助文檔中說到floatreal 轉換為字元資料時的 style 值:

0(預設值)最大為 6 位元。根據需要使用科學記號標記法。

1 始終為 8 位值。始終使用科學記號標記法。

2 始終為 16 位值。始終使用科學記號標記法。

我們的值是123456789,超過了6位元.所以不管是0還是1,2結果都會使用科學計數法來表示。那麼要怎麼樣才能將我們的資料不轉換成科學計數法而輸出呢?比較簡單的辦法就是將近似資料轉換為精確資料,然後再將精確資料轉換成字串。

同樣以上面的例子為例, 進行兩次資料類型的轉換如下:

declare @i floatset @i=123456789
print 'test:'+convert(varchar(20),convert(int,@i))
輸出:test:123456789
如果是有小數,那麼我們要轉換出小數位的話,可以轉換成decimal,轉換出的小數位元在定義decimal時指定。比如要輸出4位小數,那麼轉碼是:
declare @i floatset @i=123456789.12
print 'test:'+convert(varchar(20),convert(decimal(18,4),@i))
輸出:test:123456789.1200
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.