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