Transact-SQL处理中文日期

前一段时间,有网友问及中文日期的问题http://www.cnblogs.com/insus/articles/2012048.html,原来最终要求是需要在SQL中处理。

刚才整理了一下。把它写成一个SQL函数,需要时调用即可,下面为函数代码,仅供参考: 

View Code
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

 

演示:

SELECT [dbo].[udf_ConvertToChineseDate] (CURRENT_TIMESTAMP)

 

结果:

 

posted @ 2011-04-15 16:14  Insus.NET  阅读(646)  评论(0)    收藏  举报