ALTERFUNCTIONGetCNDay(@dt)RETURNSNvarchar(50)ASBEGINDECLARE@strNvarchar(50)--中间字符串,用于存储第一次转换后的日期字符DECLARE@YearInt,@MonthInt,@DayInt--获取函数传入的时间参数的年月日值DECLARE@strYearNvarchar(50),@strMonthNvarchar(50),@strDayNvarchar(50)--中间字符串,用于存放年月日字符串declare@eNvarchar第一次转换后分别(10)、@nNvarchar(10)、@indexInt、@resultNvarchar(50)--@e、@n和@index用于字符串比较,将@e中@index处出现的字符替换为@n@index位置的字符,@result用于存放最后处理的日期字符串,作为结果返回SELECT@e='0123456789',@n='〇123456789',@index=1SET@Year=Year(@dt)SET@Month=Month(@dt)SET@Day=Day(@dt)--生成年份SET@strYear=Cast(@YearASNvarchar(50))+'year'--生成月份IF(@Month<10)SET@strMonth=Cast(@MonthASNvarchar(50))ELSEIF(@Month=10)SET@strMonth='ten'ELSEIF(@Month>10)SET@strMonth='ten'+Cast((@Month-10)ASNvarchar(50))SET@strMonth=@strMonth+'Month'--生成天IF(@Day<10)SET@strDay=Cast(@DayASNvarchar(50))ELSEIF(@Day=10)SET@strDay='ten'ELSEIF(@Day>10AND@Day<20)SET@strDay='ten'+Cast((@Day-10)ASNvarchar(50))ELSEIF(@Day=20)SET@strDay='Twenty'ELSEIF(@Day>20AND@Day<30)SET@strDay='二十'+Cast((@Day-20)ASNvarchar(50))ELSEIF(@Day=30)SET@strDay='三十'ELSEIF(@Day=31)SET@strDay='三十一'SET@strDay=@strDay+'day'--拼接年月日SET@str=@strYear+@strMonth+@strDayWHILE@index<=Len(@str)BEGINDECLARE@sNvarchar(1)SET@s=SubString(@str,@index,1)IFCharIndex(@s,@e)>0SET@result=IsNull(@result,'')+SubString(@n,CharIndex(@s,@e),1)ELSESET@result=IsNull(@result,'')+@sSET@index=@index+1ENDRETURN@resultENDGO【本文为专栏作者张永波原创文章,转载请取得作者授权】
