Transact-SQL处理中文日期

时间:2022-01-05 11:48:50

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

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

Transact-SQL处理中文日期Transact-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 )

 

结果:

Transact-SQL处理中文日期