sql日期中文大写显示
2014-06-11 17:00
330 查看
报表中用到中文大写日期,写一函数
ALTER FUNCTION GetCNDay
(
@dt Datetime
)
RETURNS Nvarchar(50)
AS
BEGIN
DECLARE @str Nvarchar(50)--中间字符串,用于存储第一次转换之后的日期字符
DECLARE @Year Int,@Month Int,@Day Int---获取函数传入的时间参数的年月日的值
DECLARE @strYear Nvarchar(50),@strMonth Nvarchar(50),@strDay Nvarchar(50)--中间字符串,分别用于存储第一次转换之后的年月日字符串
declare @e Nvarchar(10),@n Nvarchar(10),@index Int,@result Nvarchar(50)--@e,@n和@index用于字符串比对,将@e中@index位置出现的字符替换成@n中@index位置的字符,@result用于存储最终处理完成的日期字符串,并作为返回结果
SELECT @e='0123456789',@n='〇一二三四五六七八九',@index=1
SET @Year = Year(@dt)
SET @Month = Month(@dt)
SET @Day = Day(@dt)
--生成年
SET @strYear = Cast(@Year AS Nvarchar(50)) + '年'
--生成月
IF(@Month < 10)
SET @strMonth = Cast(@Month AS Nvarchar(50))
ELSE IF(@Month = 10)
SET @strMonth = '十'
ELSE IF(@Month > 10)
SET @strMonth = '十' + Cast((@Month - 10) AS Nvarchar(50))
SET @strMonth = @strMonth + '月'
--生成日
IF(@Day < 10)
SET @strDay = Cast(@Day AS Nvarchar(50))
ELSE IF(@Day = 10)
SET @strDay = '十'
ELSE IF(@Day > 10 AND @Day < 20)
SET @strDay = '十' + Cast((@Day - 10) AS Nvarchar(50))
ELSE IF(@Day = 20)
SET @strDay = '二十'
ELSE IF(@Day > 20 AND @Day < 30)
SET @strDay = '二十' + Cast((@Day - 20) AS Nvarchar(50))
ELSE IF(@Day = 30)
SET @strDay = '三十'
ELSE IF(@Day = 31)
SET @strDay = '三十一'
SET @strDay = @strDay + '日'
--拼接年月日
SET @str = @strYear + @strMonth + @strDay
WHILE @index<=Len(@str)
BEGIN
DECLARE @s Nvarchar(1)
SET @s=SubString(@str,@index,1)
IF CharIndex(@s,@e)>0
SET @result=IsNull(@result,'')+SubString(@n,CharIndex(@s,@e),1)
ELSE
SET @result=IsNull(@result,'')+@s
SET @index=@index+1
END
RETURN @result
END
GO
ALTER FUNCTION GetCNDay
(
@dt Datetime
)
RETURNS Nvarchar(50)
AS
BEGIN
DECLARE @str Nvarchar(50)--中间字符串,用于存储第一次转换之后的日期字符
DECLARE @Year Int,@Month Int,@Day Int---获取函数传入的时间参数的年月日的值
DECLARE @strYear Nvarchar(50),@strMonth Nvarchar(50),@strDay Nvarchar(50)--中间字符串,分别用于存储第一次转换之后的年月日字符串
declare @e Nvarchar(10),@n Nvarchar(10),@index Int,@result Nvarchar(50)--@e,@n和@index用于字符串比对,将@e中@index位置出现的字符替换成@n中@index位置的字符,@result用于存储最终处理完成的日期字符串,并作为返回结果
SELECT @e='0123456789',@n='〇一二三四五六七八九',@index=1
SET @Year = Year(@dt)
SET @Month = Month(@dt)
SET @Day = Day(@dt)
--生成年
SET @strYear = Cast(@Year AS Nvarchar(50)) + '年'
--生成月
IF(@Month < 10)
SET @strMonth = Cast(@Month AS Nvarchar(50))
ELSE IF(@Month = 10)
SET @strMonth = '十'
ELSE IF(@Month > 10)
SET @strMonth = '十' + Cast((@Month - 10) AS Nvarchar(50))
SET @strMonth = @strMonth + '月'
--生成日
IF(@Day < 10)
SET @strDay = Cast(@Day AS Nvarchar(50))
ELSE IF(@Day = 10)
SET @strDay = '十'
ELSE IF(@Day > 10 AND @Day < 20)
SET @strDay = '十' + Cast((@Day - 10) AS Nvarchar(50))
ELSE IF(@Day = 20)
SET @strDay = '二十'
ELSE IF(@Day > 20 AND @Day < 30)
SET @strDay = '二十' + Cast((@Day - 20) AS Nvarchar(50))
ELSE IF(@Day = 30)
SET @strDay = '三十'
ELSE IF(@Day = 31)
SET @strDay = '三十一'
SET @strDay = @strDay + '日'
--拼接年月日
SET @str = @strYear + @strMonth + @strDay
WHILE @index<=Len(@str)
BEGIN
DECLARE @s Nvarchar(1)
SET @s=SubString(@str,@index,1)
IF CharIndex(@s,@e)>0
SET @result=IsNull(@result,'')+SubString(@n,CharIndex(@s,@e),1)
ELSE
SET @result=IsNull(@result,'')+@s
SET @index=@index+1
END
RETURN @result
END
GO
相关文章推荐
- .Net/C#/VB/T-SQL/Java 实现: 将天文数字转换成中文大写 (2000 年前的思路,打劫的,一点儿技术含量都没有)
- 转 .Net/C#/VB/T-SQL/Java/Script 实现: 将天文数字转换成中文大写 (2000 年前的思路,打劫的,一点儿技术含量都没有)
- 阿拉伯数字转大写中文_财务常用sql存储过程
- 将一串数字转化为中文字符串,使用 C# 将数字转换成大写人民币 (例如:用户输入2300,系统就会显示两千三百元 )
- 关于DbVisualizer 6.0.14中的SQL语句显示中文问题
- JavaScript--中文日期显示
- SQL转换数字中文大写
- 全中文日期显示
- 转换成大写日期(中文)
- 全中文日期显示
- Excel日期转换为大写中文数字
- 关于SQL的char,varchar字段在导出时切断中文字符显示问号或乱码的问题[原创]
- javascript显示中文日期
- 阿拉伯数字转大写中文_财务常用sql存储过程
- SQL Manager for MySQL 客户端显示中文乱码
- .Net/C#/VB/T-SQL/Java 实现: 将天文数字转换成中文大写 (2000 年前的思路,打劫的,一点儿技术含量都没有)
- pl/sql developer 中文字段显示乱码问题
- JavaScript 显示中文日期原代码
- EMS SQL Manager 中文显示为乱码解决办法
- sql日期显示为英文缩写月份加号数