精灵巫婆 发表于 2015-1-16 22:27:07

MSSQL编程:小写转年夜写金额[SQL SERVER]

MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQLAB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。server|年夜写|金额|小写
原作在SQL2000中有一些成绩。修改毛病并在SQL2000中运转经由过程。

/********************************************************
(wleii165@yahoo.com)
版本:1.0
创立工夫:20020227
修正工夫:
功效:小写金额转换成年夜写
参数:n_LowerMoney小写金额
v_TransType品种--1:directlytranslate,0:readitinwords
输入:年夜写金额
********************************************************/
CREATEPROCEDUREdbo.L2U
(
@n_LowerMoneynumeric(15,2),
@v_TransTypeint,
@RETVARCHAR(200)output
)
AS

Declare@v_LowerStrVARCHAR(200)--小写金额
Declare@v_UpperPartVARCHAR(200)
Declare@v_UpperStrVARCHAR(200)--年夜写金额
Declare@i_Iint

setnocounton

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=casesubstring(@v_LowerStr,len(@v_LowerStr)-@i_I+1,1)
WHEN.THEN元
WHEN0THEN零
WHEN1THEN壹
WHEN2THEN贰
WHEN3THEN叁
WHEN4THEN肆
WHEN5THEN伍
WHEN6THEN陆
WHEN7THEN柒
WHEN8THEN捌
WHEN9THEN玖
END
+
case@i_I
WHEN1THEN分
WHEN2THEN角
WHEN3THEN
WHEN4THEN
WHEN5THEN拾
WHEN6THEN佰
WHEN7THEN仟
WHEN8THEN万
WHEN9THEN拾
WHEN10THEN佰
WHEN11THEN仟
WHEN12THEN亿
WHEN13THEN拾
WHEN14THEN佰
WHEN15THEN仟
WHEN16THEN万
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@retvarchar(200)

execL2U567983.897,1,@retoutput

select@ret
虽然可以将一个droptable语句转换成先delete再删表,性能却会降低很多。这里我们用上面说道的另外一种可用数据:“操作前数据备份”。

谁可相欹 发表于 2015-1-19 13:03:46

我个人认为就是孜孜不懈的学习

飘飘悠悠 发表于 2015-1-24 23:40:56

我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力

深爱那片海 发表于 2015-2-2 16:13:16

其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。

admin 发表于 2015-2-8 01:10:24

原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。

灵魂腐蚀 发表于 2015-2-23 21:01:54

XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)

精灵巫婆 发表于 2015-3-7 10:25:07

对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。

老尸 发表于 2015-3-21 14:59:10

而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
页: [1]
查看完整版本: MSSQL编程:小写转年夜写金额[SQL SERVER]