sql server格式化数字

用sql语句来格式化double型的数据,比如,只取出小数点后面的两位
一。主要方法

--取小数位前数字,不考虑四舍五入
select left('30000.72234', charindex('.', '30000.72234')-1)
其中:charindex('.', '30000.72234')获得小数点的位置;-1则表示在小数点前面的全部,如果想获取小数点后面的n为,写成+n就可以了。还挺好用的。

--每三位用逗号相隔,留2位小数,不考虑四舍五入
select convert(varchar, cast(round(30000.72234,0) as money), 1)

--每三位用逗号相隔,不留小数位,考虑四舍五入
select left(convert(varchar, cast(round(30000.72234,0) as money), 1) , charindex('.', convert(varchar, cast(round(30000.72234,0) as money), 1))-1)

二。CAST和 ROUND的比较
1.
SELECT CAST('123.456' as decimal)  将会得到 123(小数点后面的将会被省略掉)。
如果希望得到小数点后面的两位。
则需要把上面的改为
SELECT CAST('123.456' as decimal(38, 2))

===>123.46
自动四舍五入了!

2.
SELECT ROUND(123.75633, 2, 1),
ROUND(123.75633, 2)
上面的SQL得到的2个值是不一样的,前一个是:123.75000,后一个是:123.76000。
因为前者在进行四舍五入之前,小数点后已经被截取,保留了2位。
而后者则没有被截取,四舍五入时自然就会得到123.76000

示例图1:

示例图2:

sql语句如下:

SELECT CONVERT(VARCHAR(15),CAST(CONVERT(DECIMAL(12,2),LTRIM(PREPAY)) AS MONEY),1) PREPAY_V,PREPAY  FROM INVOICEHD

go

格式:CONVERT(VARCHAR(15),CAST(CONVERT(DECIMAL(12,2),LTRIM(数据库教程字段名)) AS MONEY),1)

注意事项:

SELECT CONVERT(VARCHAR(100),CAST(CONVERT(DECIMAL(38,2),LTRIM('111111111111111.00')) AS MONEY),1) money

SELECT CONVERT(VARCHAR(100),CAST(CONVERT(DECIMAL(38,2),LTRIM('111111111111111.00')) AS MONEY),1) money

时间: 2024-10-01 08:24:30

sql server格式化数字的相关文章

SQL Server 提取数字、提取英文、提取中文的sql语句_MsSql

--SQL 判断字段值是否有中文 create function fun_getCN(@str nvarchar(4000)) returns nvarchar(4000) as begin declare @word nchar(1),@CN nvarchar(4000) set @CN='' while len(@str)>0 begin set @word=left(@str,1) if unicode(@word) between 19968 and 19968+20901 set @C

SQL Server 实现数字辅助表实例代码_MsSql

数字辅助表是一个连续整数的数列,通常用来实现多种不同的查询任务.大多分两类:足够大物理数字表和表函数,前者可以称为静态的,后者可以称为动态且按需生产. 物理数字表     物理数字表通常存在一个物理表,表记录相对足够大,相关的T-SQL代码如下: IF OBJECT_ID(N'dbo.Nums', 'U') IS NOT NULL BEGIN DROP TABLE dbo.Nums; END GO CREATE TABLE dbo.Nums ( Num INT NOT NULL, CONSTRA

SQL Server 实现数字辅助表实例代码

数字辅助表是一个连续整数的数列,通常用来实现多种不同的查询任务.大多分两类:足够大物理数字表和表函数,前者可以称为静态的,后者可以称为动态且按需生产. 物理数字表 物理数字表通常存在一个物理表,表记录相对足够大,相关的T-SQL代码如下: IF OBJECT_ID(N'dbo.Nums', 'U') IS NOT NULL BEGIN DROP TABLE dbo.Nums; END GO CREATE TABLE dbo.Nums ( Num INT NOT NULL, CONSTRAINT

sql server 格式化字符串加前置0或前导0

  想偷懒找个现成的函数,结果发现写SQL Server的人比我还懒,连这种基础函数都没有! 很好,因为我要的只是流水号而且会每月重置,最大的序数不会超过10万.所以就用rigth吧: declare @SN int declare @SNLen int set @SNLen = 5 set @SN = 1 select right('0000000000' + cast(@SN as varchar(10)), @SNLen) set @SN = 333 select right('00000

sql server-在SQL Server 中数字与字符串的排序问题

问题描述 在SQL Server 中数字与字符串的排序问题 原始数据是 567891011No data 数据是varchar类型希望能排列成No data567891011不能改变原始数据,也就是不可以补零select distinct column1,column2 from table order by column2以上数据是在column2 中, 希望各位大神能有好的办法 解决方案 http://blog.sina.com.cn/s/blog_95fa28e60101ry8r.html

SQL Server 开发之 使用触发器自动编号

server|触发器 使用SQL Server创建数字类型的字段,可以设置为自动编号.但很多时候并不能满足我们的需求,例如为学生编号时,可能要用到年级.系别等再加上流水号进行编号.下面给一个简单的例子,使用触发器来进行自动编号.--创建测试表     if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[usertable]') and OBJECTPROPERTY(id, N'IsUserTable') =

从SQL SERVER 向ORACLE 8迁移的技术实现方案

oracle|server  不知道从哪里得到这个文档,有用就放上来了 -gwb  数据库端SQL语法的迁移以下为常用的SQL语法迁移,包括数据类型.ID列向SEQUENCE迁移.表(主键.外键.CHECK.UNIQUE.DEFAULT.INDEX).游标.存储过程.函数.触发器.常用SQL语法与函数几个方面,考虑SQL SERVER的实际情况,没有涉及ORACLE特有的PACKAGE.EXCEPTION等.在以下的描述中,将SQL SERVER的TRANSACT-SQL简称为T-SQL.在OR

MS SQL Server中的 CONVERT 日期时间 格式化大全

出处:http://www.cnblogs.com/fernando/archive/2008/04/29/1176581.html  CONVERT 将某种数据类型的表达式显式转换为另一种数据类型.由于某些需求经常用到取日期格式的不同.现以下可在SQL Server中 将日期格式化. SQL Server 支持使用科威特算法的阿拉伯样式中的数据格式. 在表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值. 给 style 值加 100,可

Sql Server中如何实现主键由字母数字组成并按照数字自动增长

在SQL SERVER 中如果我们想要使主键按照一定规则自动增长我们可以这样做: 这里我们新建一张研究表,里面有研究ID,研究人员姓名和研究医院. 我们使SicentificId 设为主键 并且从1开始每次递加1. 这里要更各位强调一下使用Identity 关键字的前提要求是 数据类型必须为 int ,decimal,bigint,smallint等数值类型. 但是很多时候只有一个数字编号并不能满足我们的要求, 这里笔者的需求就是编号要按照字母加数字的组合,并且字母固定且数字每次递增1. 那么我