Transact-SQL处理中文日期
前一段时间,有网友问及中文日期的问题http://www.cnblogs.com/insus/articles/2012048.html,原来最终要求是需要在SQL中处理。
刚才整理了一下。把它写成一个SQL函数,需要时调用即可,下面为函数代码,仅供参考:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
CREATE FUNCTION [dbo].[udf_ConvertToChineseDate]
(
@Date DATETIME
)
RETURNS NVARCHAR(20)
AS
BEGIN
--定义一个表变量
DECLARE @Digital TABLE([D1] [TINYINT] NOT NULL,[D2] [nvarchar](2) NOT NULL,[D3] [nvarchar](2) NOT NULL)
--把值填充
INSERT INTO @Digital VALUES(0,N'〇',N'零'),(1,N'一',N'壹'),(2,N'二',N'贰'),(3,N'三',N'叁'),(4,N'四',N'肆'),(5,N'五',N'伍'),
(6,N'六',N'陆'),(7,N'七',N'柒'),(8,N'八',N'捌'),(9,N'九',N'玖')
--处理接收的变量值转换为xxxx-xx-xx日期格式
DECLARE @string NVARCHAR(20) = CONVERT(varchar(20),@Date,23)
--处理时一个临理变量
DECLARE @dumpString NVARCHAR(20) = ''
DECLARE @i INT = 1
--循环字符串
WHILE @i <= LEN(@string)
BEGIN
DECLARE @dump NVARCHAR(2) = SUBSTRING(@string,@i,1)
--判断是否为数字
IF (@dump LIKE '[0-9]')
BEGIN
IF (@dump = 0 AND (@i = 6 OR @i = 9)) --如果第6位和第9位为0省略
SET @dumpString += N''
ELSE
SET @dumpString += (SELECT [D2] FROM @Digital WHERE [D1] = @dump)
END
ELSE
BEGIN
IF @i = 5
SET @dumpString += N'年'
IF @i = 8
SET @dumpString += N'月'
END
SET @i = @i + 1
END
RETURN @dumpString + N'日'
END
(
@Date DATETIME
)
RETURNS NVARCHAR(20)
AS
BEGIN
--定义一个表变量
DECLARE @Digital TABLE([D1] [TINYINT] NOT NULL,[D2] [nvarchar](2) NOT NULL,[D3] [nvarchar](2) NOT NULL)
--把值填充
INSERT INTO @Digital VALUES(0,N'〇',N'零'),(1,N'一',N'壹'),(2,N'二',N'贰'),(3,N'三',N'叁'),(4,N'四',N'肆'),(5,N'五',N'伍'),
(6,N'六',N'陆'),(7,N'七',N'柒'),(8,N'八',N'捌'),(9,N'九',N'玖')
--处理接收的变量值转换为xxxx-xx-xx日期格式
DECLARE @string NVARCHAR(20) = CONVERT(varchar(20),@Date,23)
--处理时一个临理变量
DECLARE @dumpString NVARCHAR(20) = ''
DECLARE @i INT = 1
--循环字符串
WHILE @i <= LEN(@string)
BEGIN
DECLARE @dump NVARCHAR(2) = SUBSTRING(@string,@i,1)
--判断是否为数字
IF (@dump LIKE '[0-9]')
BEGIN
IF (@dump = 0 AND (@i = 6 OR @i = 9)) --如果第6位和第9位为0省略
SET @dumpString += N''
ELSE
SET @dumpString += (SELECT [D2] FROM @Digital WHERE [D1] = @dump)
END
ELSE
BEGIN
IF @i = 5
SET @dumpString += N'年'
IF @i = 8
SET @dumpString += N'月'
END
SET @i = @i + 1
END
RETURN @dumpString + N'日'
END
演示:
SELECT [dbo].[udf_ConvertToChineseDate] (CURRENT_TIMESTAMP)
结果: