今天將Excel中的數(shù)據(jù)導入到數(shù)據(jù)庫表A后,,某一列被自動定義成了Float數(shù)據(jù)類型,,然而,我們的正式庫中的表B的相對應的列是Varchar類型的,,所以,,就出現(xiàn)了表B中所對應的列數(shù)據(jù)變成了科學計數(shù)法的形式。 原文地址:http://www.cnblogs.com/studyzy/archive/2009/08/27/1555356.html 今天在把一些數(shù)據(jù)導入到SQL Server的時候遇到有個列被導入成float類型,,而我實際需要的是varchar類型,,所以要進行類型轉換,,轉換時遇到了一點問題,所以寫這篇博客記錄一下,。 SQL Server中的數(shù)值類型分為兩種,,一種是精確的數(shù)值類型,具體的數(shù)據(jù)類型有:bit,、tinyint,、smallint、int,、bigint,、smallmoney、money和decimal,,這些數(shù)據(jù)類型能夠精確的表明某以數(shù)值,;另一種是近似的數(shù)值類型,具體就是float和real,。浮點數(shù)據(jù)為近似值,,因此,并非數(shù)據(jù)類型范圍內(nèi)的所有值都能精確地表示,。 有些時候我們需要將這些數(shù)值類型轉換為字符串類型,,用到的轉換函數(shù)就是cast和convert,這兩個函數(shù)的作用都是進行類型轉換,,只不過語法格式不同,。據(jù)說在轉換時還是有一定的區(qū)別的,不過我個人更習慣于使用convert函數(shù),,應該這個函數(shù)一方面更像是個函數(shù)的語法,,另一方面在做時間和數(shù)值轉換成字符串時還可以指定轉換的格式。 對于精確數(shù)值的數(shù)據(jù)類型,,轉換出來的字符串就是我們存儲的數(shù)值,。比如: declare @i int set @i=123456789 print 'test:'+convert(varchar(20),@i) 輸出就是:test:123456789 而如果對于近似數(shù)值的數(shù)據(jù)類型,那么可就沒有那么簡單了,。 declare @i float set @i=123456789 print 'test:'+convert(varchar(20),@i) 輸出結果:test:1.23457e+008 輸出的結果是使用科學計數(shù)法來表示的,再看看可否通過指定轉換樣式來指定不使用科學計數(shù)法呢?幫助文檔中說到float 或 real 轉換為字符數(shù)據(jù)時的 style 值: 0(默認值)最大為 6 位數(shù),。根據(jù)需要使用科學記數(shù)法。 1 始終為 8 位值,。始終使用科學記數(shù)法,。 2 始終為 16 位值。始終使用科學記數(shù)法,。 我們的值是123456789,超過了6位數(shù).所以不管是0還是1,2結果都會使用科學計數(shù)法來表示,。那么要怎么樣才能將我們的數(shù)據(jù)不轉換成科學計數(shù)法而輸出呢?比較簡單的辦法就是將近似數(shù)據(jù)轉換為精確數(shù)據(jù),然后再將精確數(shù)據(jù)轉換成字符串,。 同樣以上面的例子為例,, 進行兩次數(shù)據(jù)類型的轉換如下: declare @i float set @i=123456789 print 'test:'+convert(varchar(20),convert(int,@i)) 輸出:test:123456789 如果是有小數(shù),那么我們要轉換出小數(shù)位的話,,可以轉換成decimal,,轉換出的小數(shù)位數(shù)在定義decimal時指定。比如要輸出4位小數(shù),,那么轉換代碼是: declare @i float set @i=123456789.12 print 'test:'+convert(varchar(20),convert(decimal(18,4),@i)) 輸出:test:123456789.1200 由于我們知道數(shù)據(jù)類型間轉換的兩種方式有:Cast,、Convert,那么他們兩者之間的區(qū)別是什么呢,? 可參考:http://technet.microsoft.com/zh-cn/library/ms187928(v=sql.105).aspx |
|
來自: icecity1306 > 《數(shù)據(jù)庫資料》