当前位置:首页 » 编程语言 » sql格式化金额
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql格式化金额

发布时间: 2022-08-15 02:24:48

A. 关于数字金额转换大写金额,sql语句

ALTER FUNCTION [dbo].[fn_NumberToChinese]( @s_money varchar(50)) /*数值类型*/
RETURNS VARCHAR(80) AS
BEGIN /*FUN*/

DECLARE @c_money VARCHAR(12) /* s_money */
DECLARE @m_string VARCHAR(22) /* 分角圆拾佰仟万拾佰仟亿 */
DECLARE @n_string VARCHAR(20) /* 壹贰叁肆伍陆柒捌玖 */
DECLARE @len int /* 金额字符串的长度 */
DECLARE @is_zero bit /* 判断是否为0, 1-true 0-false */
DECLARE @i int /* 循环变 */
DECLARE @n char /* 金额内各个位的数值 */
DECLARE @tmp decimal
DECLARE @b_string VARCHAR(80)
DECLARE @z_count VARCHAR(80)

set @b_string = ''
select @m_string = '分角圆拾佰仟万拾佰仟亿拾佰仟万'
select @n_string = '壹贰叁肆伍陆柒捌玖'
select @tmp = ROUND(cast(@s_money as decimal(20,3)),1) * 100 /* 去小数点 */
select @c_money = RTRIM(LTRIM(cast(@tmp as varchar(12)))) /* 去除首尾空格 */
select @len = len(@c_money) /* 获取长度 */

IF (@len > 11)
begin
select @b_string = '超出范围'
RETURN @b_string
end

select @is_zero = 1
select @z_count = 0
select @i = 0
WHILE @i < @len
begin /* while */
select @i = @i + 1

select @n = substring(@c_money,@i,1) /* 逐个去出数字 */
IF (@n = '0')
begin
/*if no.1*/
IF (@len-@i=6 OR @len-@i=2 OR @len=@i)
begin/* if no.2 */
IF (@is_zero = 1)
begin/* if no.3 */
select @b_string = substring(@b_string,1,len(@b_string)-1)
select @is_zero = 0
end/* if no.3 */

IF (@len-@i=6)
begin
select @b_string = @b_string + '万'
end

IF @len-@i=2
begin
select @b_string = @b_string + '圆'
end

IF @len = @i
begin
select @b_string = @b_string + '整'
end

select @z_count = 0
end/* if no.2 */
ELSE
begin/* if no.2 */
IF @z_count = 0
begin
select @b_string = @b_string + '零'
select @is_zero = 1
END
select @z_count = @z_count + 1
end/* if no.2 */
end/*if no.1*/
ELSE
begin/*if no.1*/
select @b_string = @b_string + substring(@n_string,cast(@n as int),1) + substring(@m_string,@len-@i+1,1)
select @z_count = 0
select @is_zero = 0
end/*if no.1*/

END /* while */
RETURN @b_string
END /*FUN*/

B. sql中金额字段怎么写

只有两条?我给你虚拟一张表,你看这个估计就懂了,如果是只有两条数据,那你吧count()去掉就可以了

select(T.金额-D.金额)from


(select唯一主键,max(金额),count(*)ascofrom表1havingco=2groupby唯一主键)T,
(select唯一主键,min(金额),count(*)ascofrom表1havingco=2groupby唯一主键)D

whereT.唯一主键=D.唯一主键

C. sql 如何格式化输出这个数字

SELECT SUBSTRING(CONVERT(char, 320.01), 1, 1) + '"' + SUBSTRING(CONVERT(char, 320.01), 2, 2)

same result.

D. 【SQL】金额如果存在数据库中应该使用何种类型

一般用money或decimal或numeric,而不用float或double,因为容易出现"失真".
money货币数据存储的精确度为四位小数。可以存储在 money 数据类型中的值的范围是 -922,337,203,685,477.5808 至 +922,337,203,685,477.5807(需 8 个字节的存储空间)。
在 SQL Server中,numeric 数据类型等价于 decimal 数据类型。存储 decimal 或 numeric 数值所需的字节数取决于该数据的数字总数和小数点右边的小数位数。

E. 请问:SQL中格式化显示数据用的是哪个函数

SELECT CONVERT(DECIMAL(18,2),金额) FROM 销售单;
你试一下这个应该可以
CONVERT函数是转换函数,CONVERT(DECIMAL(18,2),金额)意思是转换成小数类型(小数点后保持两位)。

F. SQL Server中有没有直接将小写金额转换成大写的函数啊,像日期函数一样,直接可以使用的

create function [dbo].[fn_getformatmoney] (@money numeric(14,2))
returns nvarchar(32) as
begin
declare @money_num nvarchar(20) --存储金额的字符形式 51itr.net
, @money_chn nvarchar(32) --存储金额的中文大写形式
, @n_chn nvarchar(1), @i int --临时变量 51itr.com

select @money_chn=case when @money>=0 then '' else '(负)' end
, @money=abs(@money)
, @money_num=stuff(str(@money, 15, 2), 13, 1, '') --加前置空格补齐到位(去掉小数点) 51itr
, @i=patindex('%[1-9]%', @money_num) --找到金额最高位

while @i>=1 and @i<=14
begin

set @n_chn=substring(@money_num, @i, 1)
if @n_chn<>'0' or (substring(@money_num,@i+1,1)<>'0' and @i not in(4, 8, 12, 14)) --转换阿拉伯数字为中文大写形式 51itr.net
set @money_chn=@money_chn+substring('零壹贰叁肆伍陆柒捌玖', @n_chn+1, 1)
if @n_chn<>'0' or @i in(4, 8, 12) --添加中文单位

set @money_chn=@money_chn+substring('仟佰拾亿仟佰拾万仟佰拾圆角分',@i,1)

set @i=@i+1
end

set @money_chn=replace(@money_chn, '亿万', '亿') --当金额为x亿零万时去掉万
if @money=0 set @money_chn='零圆整' --当金额为零时返回'零圆整'

if @n_chn='0' set @money_chn=@money_chn+'整' --当金额末尾为零分时以'整'结尾

return @money_chn --返回大写金额

end
go
--测试示例
---select dbo.fn_getformatmoney(88888)

G. sql怎么格式化取指定小数位数

控制小数显示位数的办法如下:
decimal(18,0)18是定点精度,0是小数位数。decimal(a,b)a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38。b指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 a之间的值。默认小数位数是 0。
实例:

decimal[ (p[ ,s] )] 和 numeric[ (p[ ,s] )]
固定精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。decimal 的 ISO 同义词为 dec 和 dec(p, s),numeric 在功能上等价于 decimal。
p(精度)
最多可以存储的十进制数字的总位数,包括小数点左边和右边的位数。
该精度必须是从 1 到最大精度 38 之间的值。默认精度为 18。
s (小数位数)
小数点右边可以存储的十进制数字的最大位数,小数位数必须是从 0 到 p 之间的值。
仅在指定精度后才可以指定小数位数,默认的小数位数为 0;
因此,0 <= s <= p。最大存储大小基于精度而变化。

H. 用SQL编一个把数字的钱(如100.50)转化成大写的钱(如壹佰圆零五角整)的程序

创建一个存储过程就行了

CREATE PROCEDURE dbo.L2U
(
@n_LowerMoney numeric(15,2),
@v_TransType int,
@RET VARCHAR(200) output
)
AS

Declare @v_LowerStr VARCHAR(200) -- 小写金额
Declare @v_UpperPart VARCHAR(200)
Declare @v_UpperStr VARCHAR(200) -- 大写金额
Declare @i_I int

set nocount on

select @v_LowerStr = LTRIM(RTRIM(STR(@n_LowerMoney,20,2))) --四舍五入为指定的精度并删除数据左右空格

select @i_I = 1
select @v_UpperStr = ''

while ( @i_I <= len(@v_LowerStr))
begin
select @v_UpperPart = case substring(@v_LowerStr,len(@v_LowerStr) - @i_I + 1,1)
WHEN '.' THEN '元'
WHEN '0' THEN '零'
WHEN '1' THEN '壹'
WHEN '2' THEN '贰'
WHEN '3' THEN '叁'
WHEN '4' THEN '肆'
WHEN '5' THEN '伍'
WHEN '6' THEN '陆'
WHEN '7' THEN '柒'
WHEN '8' THEN '捌'
WHEN '9' THEN '玖'
END
+
case @i_I
WHEN 1 THEN '分'
WHEN 2 THEN '角'
WHEN 3 THEN ''
WHEN 4 THEN ''
WHEN 5 THEN '拾'
WHEN 6 THEN '佰'
WHEN 7 THEN '仟'
WHEN 8 THEN '万'
WHEN 9 THEN '拾'
WHEN 10 THEN '佰'
WHEN 11 THEN '仟'
WHEN 12 THEN '亿'
WHEN 13 THEN '拾'
WHEN 14 THEN '佰'
WHEN 15 THEN '仟'
WHEN 16 THEN '万'
ELSE ''
END
select @v_UpperStr = @v_UpperPart + @v_UpperStr
select @i_I = @i_I + 1
end

--------print '//v_UpperStr ='+@v_UpperStr +'//'

if ( @v_TransType=0 )
begin
select @v_UpperStr = REPLACE(@v_UpperStr,'零拾','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零佰','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零仟','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零零零','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零角零分','整')
select @v_UpperStr = REPLACE(@v_UpperStr,'零分','整')
select @v_UpperStr = REPLACE(@v_UpperStr,'零角','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零亿零万零元','亿元')
select @v_UpperStr = REPLACE(@v_UpperStr,'亿零万零元','亿元')
select @v_UpperStr = REPLACE(@v_UpperStr,'零亿零万','亿')
select @v_UpperStr = REPLACE(@v_UpperStr,'零万零元','万元')
select @v_UpperStr = REPLACE(@v_UpperStr,'万零元','万元')
select @v_UpperStr = REPLACE(@v_UpperStr,'零亿','亿')
select @v_UpperStr = REPLACE(@v_UpperStr,'零万','万')
select @v_UpperStr = REPLACE(@v_UpperStr,'零元','元')
select @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')
end

-- 对壹元以下的金额的处理
if ( substring(@v_UpperStr,1,1)='元' )
begin
select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
end

if (substring(@v_UpperStr,1,1)= '零')
begin
select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
end

if (substring(@v_UpperStr,1,1)='角')
begin
select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
end

if ( substring(@v_UpperStr,1,1)='分')
begin
select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
end
if (substring(@v_UpperStr,1,1)='整')
begin
select @v_UpperStr = '零元整'
end
select @ret=@v_UpperStr
GO

使用时调用这个存储过程

declare @ret varchar(200)
exec L2U 567983.897,1,@ret output
select @ret

I. sql数据库中如何把money数据由元转换成万元显示,并且小数点2位,整数部分每3位用逗号隔开,谢谢!

通常来讲这种操作都是放在web前段展示的时候做转换,只是在result中给自己看意义不大,一般数据库不支持这样的转换。
理论上来讲还是可行的,说一下思路吧,首先肯定是要强转成字符类型的,然后用index函数以小数点做分割,再操作整数位和小数位,用len函数和substring函数切分,最后拼接。

J. 在SQL数据库中,设置了一个字段的类型为money,但是money类型数据保留的是四位小数,如何设置为两位小数

1、直接型,通过ToString()函数直接格式化。

例如把money = 12345.67 格式成 money = 12,345.67。代码如下:

string_money=moeny.ToString("N")或者string_moeny=money.ToString("#,###.00")

2、本地化型,通过CultureInfo类,根据指定的文化进行格式化,同样的,代码如下:

doublemoney=12345.67;

CultrueInfoci=newCultrueInfo("zh-CH");

string_money=money.ToString("c",ci)。