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)。