sqlserver中如何把字串轉換成數字

時間 2021-09-10 17:33:04

1樓:千鋒教育

在sql server 2005中,將表中字串轉換為數字的函式共2個:

1. convert(int,欄位名) 例如:select convert(int,'3')

2. cast(欄位名 as int) 例如:select cast('3' as int)

其實,一般情況下沒有必要把字串轉換為數字型別

假如需要比較兩個欄位是否相等,但是一個欄位為字串型別,一個為數字型別,用「=」比較兩個值是否相等時,sql server會自動把字串轉換為數字再比較的!

例如:select da.title_name,dsc.name

from dbo.dv_duty dd

inner join dv_second_class dsc on (dsc.id=dd.area)

left join dv_asset da on(da.id=dd.record_id and dd.type='2')

where dd.area is not null

這個sql中,inner join dv_second_class dsc on (dsc.id=dd.area) 中dsc.

id為數字型別,dd.area為字元型別,相當於這樣on(1='1')的判斷,這時候就會自動吧字串的'1'轉換為數字型別再比較的。

但是也有弊端,一旦字元型別轉換為數字型別出錯(說明字串的確就非數字組成的),sql就會丟擲異常。

sql server 2005中有判斷欄位是否為數字的函式:

isnumeric(欄位名) -----假如欄位是數字型別返回1,不是就返回0

但是好像有的時候不好使,比如:select isnumeric('3,34') 就返回1

說明這個函式對欄位值中全是數字但是數字間用「,」和「.」(逗號或點)隔開的都視為數字了!

2樓:匿名使用者

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

輸出的結果是使用科學計數法來表示的,再看看可否通過指定轉換樣式來指定不使用科學計數法呢?幫助文件中說到float 或 real 轉換為字元資料時的 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

3樓:匿名使用者

cast("1" as int)

convert(int,"1")

c primer plus中scanf 把字串讀進字元陣列中為什麼不要使用

scanf 把一個字串讀進一個字元陣列中,語句如下 char str 100 scanf s str 這裡的str就是陣列的首地址,s表明,輸入1或多個字元到這個地址中去。scanf 函式要求引數必須是對應的地址型別,str本身就是地址,所以,不用加 了。是取變數地址符,如果在輸入數值類,如 d c...

如何在js中把字元轉換成json物件

黑馬程式設計師 例如 json字串 var str1 json物件 var str2 一 json字串轉換為json物件 要使用上面的str1,必須使用下面的方法先轉化為json物件 由json字串轉換為json物件 var obj eval str 或者var obj str.parsejson ...

SQL server中如何更改排序規則

普實軟體 開始之前,先確認排序規則 或大小寫是否敏感 檢視伺服器排序規則 安裝時指定的排序規則 select serverproperty collation as servercollation databasepropertyex tempdb collation as tempdbcollat...