sql中转换中文日期

88391788 2008-06-11 10:09:49
问一个问题:SQL中日期转换

2008-6-6 15:30:30
如何转换为:
2008年6月6日 下午 03:30:30

用什么函数


顺便:
如何把数字的日期改写成中文日期?
如2005年6月6日 改成 二OO五年六月六日

...全文
1839 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanjs 2008-06-12
  • 打赏
  • 举报
回复
学习了,都是好东西!
我也来个



declare @dt datetime
set @dt=getdate()
select rtrim(year(@dt))+'年'+rtrim(month(@dt))+'月'+rtrim(day(@dt))+'日 '
+case when datepart(hh,@dt)>12 then '下午 '+rtrim(datepart(hh,@dt)-12)+right(convert(varchar(20),@dt,120),6)
else '上午 '+right(convert(varchar(20),@dt,120),8) end cndate

Andy-W 2008-06-11
  • 打赏
  • 举报
回复
Declare @date datetime
Set @date='2008-6-6 15:30:30'
Select
Rtrim(Year(@date))+'年'+
Rtrim(Month(@date))+'月'+
Rtrim(Day(@date))+'日 '+
Replace(Replace(Right(Convert(char(18),@date,100),2),'AM','上午'),'PM','下午')+
Convert(char(8),@date,108)

/*2008年6月6日 下午 03:30:30*/


--2005年6月6日 改成 二OO五年六月六日
Declare @x nvarchar(64)
Set @x='2005年6月6日'

Select
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(@x,
'1','一'),
'2','二'),
'3','三'),
'4','四'),
'5','五'),
'6','六'),
'7','七'),
'8','八'),
'9','九'),
'0','O')

/*二OO五年六月六日*/
pt1314917 2008-06-11
  • 打赏
  • 举报
回复


declare @t datetime
set @t='2008-6-6 15:30:30'
select ltrim(year(@t))+'年'+ltrim(month(@t))+'月'+ltrim(day(@t))+'日 '
+case when datepart(hh,@t)>=12 then '下午 '+ right('00'+ltrim(datepart(hh,@t)-12),2)
else '上午 '+right('00'+ltrim(datepart(hh,@t)),2) end
+right(convert(varchar(10),@t,108),6)

---结果:
2008年6月6日 下午 03:30:30






prewin 2008-06-11
  • 打赏
  • 举报
回复
看着就眼花!
wzy_love_sly 2008-06-11
  • 打赏
  • 举报
回复
create proc proc_enreplace
@dt nvarchar(50)
as
begin
declare @e nvarchar(10),@n nvarchar(10),@index int,@result varchar(50)
select @e='0123456789',@n='零一二三四五六七八九',@index=1
while @index<=len(@dt)
begin
declare @s nvarchar(1)
set @s=substring(@dt,@index,1)
if charindex(@s,@e)>0
set @result=isnull(@result,'')+substring(@n,charindex(@s,@e),1)
else
set @result=isnull(@result,'')+@s
set @index=@index+1
end
select @result
end

exec proc_enreplace '2005年6月6日'


二零零五年六月六日
懒牛科技 2008-06-11
  • 打赏
  • 举报
回复
create procedure convertDateToChinese
@vdate datetime,@ChineseDateStr varchar(50) out
as
declare @vYear varchar(20)
declare @vMonth varchar(20)
declare @vDay varchar(20)
declare @temstr varchar(100)

set @temstr = ''
set @vYear = datename(yyyy,@vdate)
print @vyear
set @vMonth = datename(mm,@vdate)
print @vMonth
set @vDay = datename(dd,@vdate)
print 'v'+@vDay
-- 开始计算年份
set @temstr = dbo.convertNumToChinese(substring(@vYear,1,1))
set @temstr = @temstr + dbo.convertNumToChinese(substring(@vYear,2,1))
set @temstr = @temstr + dbo.convertNumToChinese(substring(@vYear,3,1))
set @temstr = @temstr + dbo.convertNumToChinese(substring(@vYear,4,1))
set @temstr = @temstr + '年'

-- 开始计算月份
if substring(@vMonth,1,1) = '0'
set @temstr = @temstr + dbo.convertNumToChinese(substring(@vMonth,2,1))
else
begin
if substring(@vMonth,2,1) = '0'
set @temstr = @temstr + '十'
else
set @temstr = @temstr +'十'+ dbo.convertNumToChinese(substring(@vMonth,2,1))
end

set @temstr = @temstr + '月'

-- 开始计算日期

if convert(int,@vDay) < 10
set @temstr = @temstr + dbo.convertNumToChinese(substring(@vDay,1,1))
else
begin
if substring(@vDay,2,1) = '0'
begin
if substring(@vDay,1,1)<> '1'
set @temstr = @temstr + dbo.convertNumToChinese(substring(@vDay,1,1)) + '十'
else
set @temstr = @temstr + '十'
end
else
begin
if substring(@vDay,1,1) <> '1'
set @temstr = @temstr + dbo.convertNumToChinese(substring(@vDay,1,1)) + '十' + dbo.convertNumToChinese(substring(@vDay,2,1))
else
set @temstr = @temstr + '十' + dbo.convertNumToChinese(substring(@vDay,2,1))
end
end
set @temstr = @temstr + '日'
print @temstr
set @ChineseDateStr = @temstr

------ 配合相关函数 ------

create function convertNumToChinese
(@instr varchar(2))
returns varchar(2)
as
begin
declare @temStr varchar(2)
if @instr = '1' set @temStr = '一'
if @instr ='2' set @temStr = '二'
if @instr ='3' set @temStr = '三'
if @instr ='4' set @temStr = '四'
if @instr ='5' set @temStr = '五'
if @instr ='6' set @temStr = '六'
if @instr ='7' set @temStr = '七'
if @instr ='8' set @temStr = '八'
if @instr ='9' set @temStr = '九'
if @instr ='0' set @temStr = '零'
return @temstr
end


测试
exec convertDateToChinese '2008-06-11 13:30',''
2008
06
v11
二零零八年六月十一日

wzy_love_sly 2008-06-11
  • 打赏
  • 举报
回复
declare @dt varchar(50)
set @dt='2008-6-6 15:30:30'
select datename(yy,@dt)+'年'+datename(mm,@dt)+'月'+datename(dd,@dt)+'日'+case when datepart(hh,@dt)>12 then '下午' else '上午' end +right(@dt,8)


2008年06月6日下午15:30:30
-狙击手- 2008-06-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mqcan 的回复:]
呵呵.2的比较中规中矩
不知道有没有好的方法!
[/Quote]


就mssql本身来说,貌似没有
-狙击手- 2008-06-11
  • 打赏
  • 举报
回复
declare @t varchar(30)
set @t = '2005年6月6日'

--while (patindex('%[0-9]%',@t) > 0)
--begin
set @t = replace(replace(replace(replace(replace(replace(@t,'1','一'),'2','二'),'3','三'),'0','O'),'5','五'),'6','六')

select @t

/*
------------------------------
二OO五年六月六日

(所影响的行数为 1 行)

*/
懒牛科技 2008-06-11
  • 打赏
  • 举报
回复
呵呵.2的比较中规中矩
不知道有没有好的方法!
-狙击手- 2008-06-11
  • 打赏
  • 举报
回复
declare @t datetime,@s varchar(30)
set @t = '2008-6-6 15:30:30'

select @s = convert(varchar,@t ,120)


select @s = left(@s,4) + '年'+substring(@s,6,2)+ '月' + substring(@s,9,2)
+ case when cast(substring(@s,12,2) as int ) > 12 then ' 下午 '+ right( '00'+ltrim(cast(substring(@s,12,2) as int ) - 12) ,2 ) else '上午' + substring(@s,12,2) end
+ right(@s,6)

select @s

/*
------------------------------
2008年06月06 下午 03:30:30

(所影响的行数为 1 行)


*/
灰太狼 2008-06-11
  • 打赏
  • 举报
回复
这个有点难度了

34,836

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧