黑马程序员技术交流社区

标题: SQLServer中如何将日期转换成中文形式 [打印本页]

作者: 10642491    时间: 2011-10-30 06:53
标题: SQLServer中如何将日期转换成中文形式
数据库中如何将一个英文的日期'2011-08-08 00:00:00' 转换成'二零一一年零八月零八零八日零时零分零秒'
作者: 黄威    时间: 2011-11-2 16:44
没有思路呀?同求解?
作者: 朱勋    时间: 2011-11-4 16:01
要不利用C#先转化然后在插入数据库么?
作者: 黄朝辉    时间: 2011-11-4 16:07
对于这么问题我感到很无奈!!!!
我不知道楼主为何要问这个问题。。。
作者: 10642491    时间: 2011-11-5 07:58
这个我也不会所以问一下,我更愿意把它看成是“哥德巴赫猜想”呵呵,期待高手指导。
作者: DotNet菜鸟    时间: 2011-11-5 13:50
写了个函数,办法比较笨,不过效果是达到了
CREATE FUNCTION ConvertDateTimeToChinese
(
        @DateTime DATETIME
)
RETURNS NVARCHAR(20)
AS
BEGIN
    -- 返回的大写中文字符串
        DECLARE @Chinese NVARCHAR(20)
        DECLARE @Str NVARCHAR(20)
        SET @Chinese = ''
        -- 将日期转换成 2000-08-11 00:00:00 格式的字符串
        SET @Str = CONVERT(VARCHAR(20),@DateTime,120)
       
        -- 将'-'替换成'年',' '替换成'日',':'替换成'时'
        SET @Str = REPLACE(@Str,'-','年')
        SET @Str = REPLACE(@Str,' ','日')
        SET @Str = REPLACE(@Str,':','时')
       
        -- 将第二个'年'替换成'月',第二个'时'替换成'分'
        SET @Str = STUFF(@Str,8,1,'月')
        SET @Str = STUFF(@Str,17,1,'分')
       
        DECLARE @Len INT
        DECLARE @i INT
        DECLARE @Num NVARCHAR(1)
        SET @Len = LEN(@Str)
        SET @i = 1
        WHILE(@i <= @Len)
        BEGIN
                SET @Num = SUBSTRING(@Str,@i,1)
                SET @Num = CASE @Num WHEN '0' THEN '零'
                WHEN '1' THEN '一'
                WHEN '2' THEN '二'
                WHEN '3' THEN '三'
                WHEN '4' THEN '四'
                WHEN '5' THEN '五'
                WHEN '6' THEN '六'
                WHEN '7' THEN '七'
                WHEN '8' THEN '八'
                WHEN '9' THEN '九'  ELSE @Num END
                SET @Chinese = @Chinese + @Num
                SET @i = @i + 1
        END
        SET @Chinese = @Chinese + '秒'
        RETURN @Chinese
END

调用上面创建的函数:
SELECT DBO.ConvertDateTimeToChinese('2011-08-08 00:00:00')

返回结果:
二零一一年零八月零八日零零时零零分零零秒
作者: 黄威    时间: 2011-11-5 16:02
楼上很给力呀,可是还是有点小问题:二零一一年一一月零五日一五时五一分三三秒,看着别扭
作者: yy312232557    时间: 2011-11-6 00:09
DotNet菜鸟 发表于 2011-11-5 13:50
写了个函数,办法比较笨,不过效果是达到了
CREATE FUNCTION ConvertDateTimeToChinese
(

虽然这位楼主已经给出了解决方案,
但是我很不接,楼主为什么要在数据库中玩这么一个操作???这么个玩法有什么实在意义吗???
在真正的开发当中,应该不会有人这么玩吧!
即便真的有需要要对日期进行中文和数字的转换,
那我们完全可以用我们强大的C#代码来实现
(因为C#里面封装了很多特有的方法可以很容易的处理这些个问题,但是SQL Server 是专门用来处理数据的,我理解为他应该专注与对数据的查询,查询性能的优化,表结构的可扩展性,高并发和索引处理等等,而不是拿来处理你这些)

当然也可以做,但是我觉得只是在必要的时候做一些简单的转换,等,也许理解的不是很正确,但是希望对你有帮助





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2