怎么把money格式字符串變成數(shù)字?
SQL Server中的數(shù)值類型分為兩種,一種是精確的數(shù)值類型,具體的數(shù)據(jù)類型有:bit、tinyint、smallint、int、bigint、smallmoney、money和decimal,這些數(shù)據(jù)類型能夠精確的表明某以數(shù)值;另一種是近似的數(shù)值類型,具體就是float和real。浮點(diǎn)數(shù)據(jù)為近似值,因此,并非數(shù)據(jù)類型范圍內(nèi)的所有值都能精確地表示。
有些時(shí)候我們需要將這些數(shù)值類型轉(zhuǎn)換為字符串類型,用到的轉(zhuǎn)換函數(shù)就是cast和convert,這兩個(gè)函數(shù)的作用都是進(jìn)行類型轉(zhuǎn)換,只不過(guò)語(yǔ)法格式不同。據(jù)說(shuō)在轉(zhuǎn)換時(shí)還是有一定的區(qū)別的,不過(guò)我個(gè)人更習(xí)慣于使用convert函數(shù),應(yīng)該這個(gè)函數(shù)一方面更像是個(gè)函數(shù)的語(yǔ)法,另一方面在做時(shí)間和數(shù)值轉(zhuǎn)換成字符串時(shí)還可以指定轉(zhuǎn)換的格式。
對(duì)于精確數(shù)值的數(shù)據(jù)類型,轉(zhuǎn)換出來(lái)的字符串就是我們存儲(chǔ)的數(shù)值。比如:
declare @i intset @i=123456789
print 'test:'+convert(varchar(20),@i)
輸出就是:test:123456789
而如果對(duì)于近似數(shù)值的數(shù)據(jù)類型,那么可就沒(méi)有那么簡(jiǎn)單了。
declare @i floatset @i=123456789
print 'test:'+convert(varchar(20),@i)
輸出結(jié)果:test:1.23457e+008
輸出的結(jié)果是使用科學(xué)計(jì)數(shù)法來(lái)表示的,再看看可否通過(guò)指定轉(zhuǎn)換樣式來(lái)指定不使用科學(xué)計(jì)數(shù)法呢?幫助文檔中說(shuō)到float 或 real 轉(zhuǎn)換為字符數(shù)據(jù)時(shí)的 style 值:
0(默認(rèn)值)最大為 6 位數(shù)。根據(jù)需要使用科學(xué)記數(shù)法。
1 始終為 8 位值。始終使用科學(xué)記數(shù)法。
2 始終為 16 位值。始終使用科學(xué)記數(shù)法。
我們的值是123456789,超過(guò)了6位數(shù).所以不管是0還是1,2結(jié)果都會(huì)使用科學(xué)計(jì)數(shù)法來(lái)表示。那么要怎么樣才能將我們的數(shù)據(jù)不轉(zhuǎn)換成科學(xué)計(jì)數(shù)法而輸出呢?比較簡(jiǎn)單的辦法就是將近似數(shù)據(jù)轉(zhuǎn)換為精確數(shù)據(jù),然后再將精確數(shù)據(jù)轉(zhuǎn)換成字符串。
同樣以上面的例子為例, 進(jìn)行兩次數(shù)據(jù)類型的轉(zhuǎn)換如下:
declare @i floatset @i=123456789
print 'test:'+convert(varchar(20),convert(int,@i))
輸出:test:123456789如果是有小數(shù),那么我們要轉(zhuǎn)換出小數(shù)位的話,可以轉(zhuǎn)換成decimal,轉(zhuǎn)換出的小數(shù)位數(shù)在定義decimal時(shí)指定。比如要輸出4位小數(shù),那么轉(zhuǎn)換代碼是:
declare @i floatset @i=123456789.12
print 'test:'+convert(varchar(20),convert(decimal(18,4),@i))
輸出:test:123456789.1200