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,对所有有效的文本和字符串就是有效的数据类型。

    原文作者:记忆储存处
    原文地址: https://blog.csdn.net/qq_34357018/article/details/107784864
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞