前一段时间,有网友问及中文日期的问题,原来最终要求是需要在SQL中处理。

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


Transact-SQL处理中文日期_CURRENT_TIMESTAMPTransact-SQL处理中文日期_sql_02View 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处理中文日期_t-sql_03