您的位置:首页 > 数据库 > Oracle

在SQL service或Oracle中将数字转换成有千位符号

2015-08-11 09:42 501 查看

1、在SQL service中的写法:

--Function主体
CREATE FUNCTION [dbo].[FnMoneyStyle](@Number float,@strType char(1))
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @ReturnValue varchar(100)
SET @ReturnValue=0
SET @Number=ISNULL(@Number,0)
--千分
IF @strType = '1'    --千分 无小数点
SET @ReturnValue= left(convert(varchar,convert(money,@Number),1),len(convert(varchar,convert(money,@Number),1))-3)
IF @strType = '2'    --千分 两位小数点
SET @ReturnValue= convert(varchar,convert(money,@Number),1)
IF @strType = '5'    --千分 两位小数点 去掉.00
SET @ReturnValue=REPLACE(convert(varchar,convert(money,@Number),1),'.00', '')
--非千分
IF @strType = '3'    --四位小数
SET @ReturnValue= convert(varchar,convert(money,@Number),2)
IF @strType = '4'    --去掉.00
SET @ReturnValue=REPLACE(convert(varchar,convert(money,@Number)),'.00', '')

RETURN @ReturnValue
END

--Function测试结果:
SELECT dbo.FnMoneyStyle(300000.00,1)--返回结果:300,000
SELECT dbo.FnMoneyStyle(300000.00,2)--返回结果:300,000.00
SELECT dbo.FnMoneyStyle(300000.00,3)--返回结果:300000.0000
SELECT dbo.FnMoneyStyle(300000.00,4)--返回结果:300000

2、在Oracle中的写法:

--function主体:
create or replace function FnMoneyStyle
(
fNumber float,
strType varchar2
) return varchar2
as
ReturnValue varchar2(4000):=0;
begin

--千分
IF strType = '1' THEN --千分 无小数点
SELECT SUBSTR
(
TRIM(DECODE(fNumber,0,'0.00',TO_CHAR(fNumber,'999,999,999,999,999.99')))
,1
,LENGTH(TRIM(DECODE(fNumber,0,'0.00',TO_CHAR(fNumber,'999,999,999,999,999.99'))))-3
) INTO ReturnValue
FROM DUAL;
END IF;

IF strType = '2' THEN --千分 两位小数点
SELECT TRIM(DECODE(fNumber,0,'0.00',TO_CHAR(fNumber,'999,999,999,999,999.99'))) INTO ReturnValue
FROM DUAL;
END IF;

IF strType = '5' THEN --千分 两位小数点 去掉.00
SELECT REPLACE
(
TRIM(DECODE(fNumber,0,'0.00',TO_CHAR(fNumber,'999,999,999,999,999.99')))
,'.00'
,''
) INTO ReturnValue
FROM DUAL;
END IF;

--非千分
IF strType = '3' THEN --四位小数
SELECT TRIM(DECODE(fNumber,0,'0.0000',TO_CHAR(fNumber,'9999999999999999999999999.9999'))) INTO ReturnValue
FROM DUAL;
END IF;

IF strType = '4' THEN  --去掉.00
SELECT REPLACE
(
TRIM(DECODE(fNumber,0,'0.00',TO_CHAR(fNumber,'9999999999999999999999999.99')))
,'.00'
,''
) INTO ReturnValue
FROM DUAL;
END IF;
dbms_output.put_line(ReturnValue);
return(ReturnValue);
end FnMoneyStyle;

--function测试结果:
SELECT FnMoneyStyle(30000.123,'1') FROM DUAL--返回结果:30,000
SELECT FnMoneyStyle(30000.123,'2') FROM DUAL--返回结果:30,000.12
SELECT FnMoneyStyle(30000.123,'3') FROM DUAL--返回结果:30000.1230
SELECT FnMoneyStyle(30000.123,'4') FROM DUAL--返回结果:30000.12
SELECT FnMoneyStyle(30000.123,'5') FROM DUAL--返回结果:30,000.12

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: