Sql Server中将数值类型的末尾0去掉

Sql Server中将数值类型的末尾0去掉


1、SQL中要求查询出某表里XX数量:

SELECT
  CONVERT(FLOAT, ISNULL(A.VALUE,0))
FROM WORK_INFO AS A
WHERE
  A...

注意:
CONVERT(FLOAT,XX)虽然可以去掉小数点后末尾0,但是,当整数部不大于15位数时,小数部显示个数=15-整数部个数;当整数部大于15位数时,小数部会四舍五入,且显示科学计数法
eg:
SELECT
  CONVERT(float ,12345678.123456789000)
  , CONVERT(float ,123.1234567896667000)
  , CONVERT(float ,123456789333333.1234567896667000)
结果为:
12345678.1234568	
123.123456789667	
1.23456789333333E15

2、SQL中要求查询出某表里XX数量+单位:

第一种:(不建议使用)
SELECT
  CONVERT(VARCHAR(20),CONVERT(FLOAT, ISNULL(A.VALUE,0))) + ISNULL(A.UNIT,'')
FROM WORK_INFO AS A
WHERE
  A...

注意:
①两个ISNULL不可省,要不然当其中一个值为null时,查询出来值是null
②CONVERT(FLOAT,XX)虽然可以去掉小数点后末尾0,但有两个致命问题,当整数部不大于6位数时,小数部显示个数=6-整数部个数;当整数部大于6位数时,小数部会四舍五入,且显示科学计数法
eg:CONVERT(FLOAT,2345.6790)-->2345.68;
    CONVERT(FLOAT,3458888.6789)-->3.45889e+006
③由于单位不是数值,所以用CONVERT(VARCHAR(20),)再拼接单位

第二种:(有点麻烦)
SELECT
  ISNULL(REVERSE(STUFF(REVERSE(CONVERT(VARCHAR,A.VALUE)),1,PATINDEX('%[1-9]%',REVERSE(CONVERT(VARCHAR,A.VALUE)))-1,'')), 0)
    + ISNULL(A.UNIT, '')
FROM WORK_INFO AS A
WHERE
  A...

关于第二种中使用到的函数:

①Sql sever里自带的REVERSE函数,这个函数的主要功能是把一个字符产反转。

  --select REVERSE('hello,world')

  --将得到如下的输出:dlrow,olleh

②Sql sever里自带的STUFF函数将字符串插入到另一个字符串中。 它从第一个字符串的开始位置删除指定长度的字符;然后将第二个字符串插入到第一个字符串的开始位置。

  --语法:STUFF ( character_expression , start , length , replaceWith_expression )

③Sql sever里面有个自带的PATINDEX函数,返回pattern字符串在表达式expression里第一次出现的位置,起始值从1开始算。

  --语法格式:PATINDEX ( '%pattern%' , expression )

  --pattern字符串在expression表达式里没找就返回0,对所有有效的文本和字符串就是有效的数据类型。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值