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](2NOT NULL,[D3] [nvarchar](2NOT 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  阅读(608)  评论(0编辑  收藏  举报