今天導入客戶用戶信息時,發現Excel中的手機號碼導入到SQL時是float,就用Convert直接轉成Varchar更新到數據庫中了,查看后發現是 使用的科學計數法的1.37..+e10,就把 Excel表中相關的單元格的格式設置成了 文本,心想總可以了吧,導入后發現還是 科學計數法。郁悶
?
摸索后發現通過如下的設置可以解決這個問題
1、將 字段的數據類型設置為 double(numberic應該也可以),保存表設計,數據自動加上 ".00",
2、再將字段屬性設置為 Varchar,還是帶有 ".00"的Varchar數據
3、寫一個Update語句,用Replace去掉數據中的 ".00"
OK,搞定
?
從網上還查到一個方法,因為時間緊張,沒有去驗證,在此摘抄一下,希望對大家有幫助:
原文地址: http://www.cnblogs.com/studyzy/archive/2009/08/27/1555356.html
今天在把一些數據導入到SQL Server的時候遇到有個列被導入成float類型,而我實際需要的是varchar類型,所以要進行類型轉換,轉換時遇到了一點問題,所以寫這篇博客記錄一下。
SQL Server中的數值類型分為兩種,一種是精確的數值類型,具體的數據類型有:bit、tinyint、smallint、int、bigint、smallmoney、money和decimal,這些數據類型能夠精確的表明某以數值;另一種是近似的數值類型,具體就是float和real。浮點數據為近似值,因此,并非數據類型范圍內的所有值都能精確地表示。
有些時候我們需要將這些數值類型轉換為字符串類型,用到的轉換函數就是cast和convert,這兩個函數的作用都是進行類型轉換,只不過語法格式不同。據說在轉換時還是有一定的區別的,不過我個人更習慣于使用convert函數,應該這個函數一方面更像是個函數的語法,另一方面在做時間和數值轉換成字符串時還可以指定轉換的格式。
對于精確數值的數據類型,轉換出來的字符串就是我們存儲的數值。比如:
declare @i int set @i=123456789
print 'test:' + convert ( varchar (20),@i)
輸出就是:test:123456789
而如果對于近似數值的數據類型,那么可就沒有那么簡單了。
declare @i float set @i=123456789
print 'test:' + convert ( varchar (20),@i)
輸出結果:test:1.23457e+008
輸出的結果是使用科學計數法來表示的,再看看可否通過指定轉換樣式來指定不使用科學計數法呢?幫助文檔中說到 float 或 real 轉換為字符數據時的 style 值:
0 (默認值)最大為 6 位數。根據需要使用科學記數法。
1 始終為 8 位值。始終使用科學記數法。
2 始終為 16 位值。始終使用科學記數法。
我們的值是123456789,超過了6位數.所以不管是0還是1,2結果都會使用科學計數法來表示。那么要怎么樣才能將我們的數據不轉換成科學計數法而輸出呢?比較簡單的辦法就是將近似數據轉換為精確數據,然后再將精確數據轉換成字符串。
同樣以上面的例子為例, 進行兩次數據類型的轉換如下:
declare @i float set @i=123456789
print 'test:' + convert ( varchar (20), convert ( int ,@i))
輸出:test:123456789
如果是有小數,那么我們要轉換出小數位的話,可以轉換成decimal,轉換出的小數位數在定義decimal時指定。比如要輸出4位小數,那么轉換代碼是:
declare @i float set @i=123456789.12
print 'test:' + convert ( varchar (20), convert ( decimal (18,4),@i))
輸出:test:123456789.1200
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
