1. sqlserver中如何把字符串转换成数字
在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替换的问题,怎么让数字变成指定位数
按照你的说法也就是说整个字符串的长度固定。那么就用length(oracle),len(sql server)进行判断,凡是不满足长度的都要加0补全。
会纪[2013]这部分是固定的,那么我们就刨除这部分利用后面的长度固定来做。我只会写oracle的,其他数据库可能你要找找他的函数了。
update table set WG7=substr(WG7,1,length('会纪[2013]'))||lpad(substr(WG7,length('会纪[2013]'+1),length('0000号'),'0') where length(WG7)
3. 在SQL语句里面如何将字符型转换成数字型
先检查金额列的数据是否都符合小数规范,用cast(金额 as decimal(10,4))>500或者
convert(decimal(10,4),金额)>500
注:decimal的长度和小数位数根据自己需要设定
sql中将字符串数字转换成数字:
方法一:SELECT CAST('123' AS SIGNED integer);
方法二:SELECT CONVERT('123',SIGNED);
方法三:SELECT '123'+0;
扩展资料:
能将字符型转换成数字型,就能将数字转化为字符,对于精确数值的数据类型,转换出来的字符串就是我们存储的数值。比如:
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
4. sql语句中怎样将字符类型转换成数字类型
先检查金额列的数据是否都符合小数规范,转为数字格式只有是数字的字符串才能转,如000012转为12,.55转为0.55,若是个英文符号等字符转了就报无效数字类型的错。
转换的方式很多,但是字符串转换成数字的前提是字符串中只包含了数字或者小数点。
可使用convert函数,cast 和convert可以显式转换数据类型,在某些情况下SQL会根据实际情况自动转换!不过建议显式的转换一下,这样的话可读性高一点!
因为字符串不一定能转换成数字,所以用上面的,加上错误处理比较。
例子:
declare @a varchar(10)
set @a='as23'
select case when isnumeric(@a)=1 then cast(@a as int) else null end
set @a='23'
select case when isnumeric(@a)=1 then cast(@a as int) else null end
结果:
declare @a varchar(10)
set @a='as23'
select case when isnumeric(@a)=1 then cast(@a as int) else null end
set @a='23'
select case when isnumeric(@a)=1 then cast(@a as int) else null end