SQL Server标量函数将数字转换为带有序数的单词
Posted
技术标签:
【中文标题】SQL Server标量函数将数字转换为带有序数的单词【英文标题】:SQL Server scalar function to convert number to words with ordinal 【发布时间】:2017-04-26 04:35:35 【问题描述】:如何在 SQL Server 中构建一个标量函数,将数字转换为带有序数的单词。 例子 : 输入 25 的输出应为“二十五分之一”
谢谢。
【问题讨论】:
明智地编程这是个好问题,但您不会在数据库中处理此类事情。 数据库绝对是做这件事的错误地方,但对于傻笑,我们可能有几种方法可以解决这个问题。你想去什么范围? 0 到 999 之间的任何数字? how to write number to word function in sql server的可能重复 【参考方案1】:范围 0 到 9999
declare @t table(col1 int,col2 varchar(50),col3 int)
insert into @t (col1,col2) VALUES (0,'Zero'),(1,'One'),(2,'Two')
,(3,'Three'),(4,'Four'),(5,'Five'),(6,'Six'),(7,'Seven'),(8,'Eight')
,(9,'Nine'),(10,'Ten'),(11,'eleven'),(12,'Twelve'),(13,'thirteen')
,(14,'Fourteen'),(15,'Fifteen'),(16,'Sixteen'),(17,'Seventeen')
,(18,'Eighteen'),(19,'Nineteen'),(20,'Twenty'),(30,'Thirty'),(40,'Forty')
,(50,'Fifty'),(60,'Sixty'),(70,'Seventy'),(80,'Eighty'),(90,'Ninety')
,(100,'Hundreds'),(1000,'Thousands'),(10000,'Thousands')
declare @input varchar(10)='1897'
declare @Words varchar(2000)=''
declare @i int=len(@input)
while((len(@input)>0))
begin
if(@input>=0 and @input<=19 and @i=len(@input))
begin
select @Words=@Words+' '+ col2 from @t where col1 =@input
BREAK
END
else if(len(@input) between 3 and 4)
BEGIN
select @Words=@Words+' '+ col2 from @t where col1 =@input/cast(('1'+replicate('0',len(@input)-1)) as int)
select @Words=@Words+' '+ col2 from @t where col1 ='1'+replicate('0',len(@input)-1)
END
else
begin
select @Words=@Words+' '+ col2 from @t where col1 =left(@input,1)+ replicate('0',@i-1)
END
set @input=stuff(@input,1,1,'')
if(cast(@input as int)=0)
BREAK
set @i=@i-1
end
select @Words
【讨论】:
以上是关于SQL Server标量函数将数字转换为带有序数的单词的主要内容,如果未能解决你的问题,请参考以下文章
sql server中是不是有可以将数字转换为单词的内置函数