string转换成date型

luyisir2 2005-09-20 01:52:47
数据库中有一字段是string型,存储的是日期,比如2005年9月,存储的就是SEP-2005。现取数据时欲按这个字段排序,请教sql语句中如何把这个字段转换成date型以便于排序!
...全文
109 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
老本 2005-09-20
  • 打赏
  • 举报
回复
最方便的方法是,创建一个视图。

create view Vtest
as
select right(old_date_str,4)
+'-'
+(case left(old_date_str,charindex('-',lower(@str))-1)
when 'jan' then '01'
when 'feb' then '02'
when 'mar' then '03'
when 'apr' then '04'
when 'may' then '05'
when 'jun' then '06'
when 'jul' then '07'
when 'aug' then '08'
when 'sep' then '09'
when 'oct' then '10'
when 'nov' then '11'
else '12'
end
) date_str_YYYY_MM,
old_date_str,
OtherFieldsList
from YourTable

select * from Vtest2005-9-20 20:39
order by date_str_YYYY_MM
feitianbianfu16 2005-09-20
  • 打赏
  • 举报
回复
select * from [TABLE] order by cast(period as datetime)
vivianfdlpw 2005-09-20
  • 打赏
  • 举报
回复
create function f_convert(@str)
returns datetime
as
begin
declare @tmp varchar(20)
set @tmp=right(@str,4)
+'-'
+(case left(@str,charindex('-',@str)-1)
when 'Jan' then '01'
when 'Feb' then '02'
when 'Mar' then '03'
when 'Apr' then '04'
when 'May' then '05'
when 'Jun' then '06'
when 'Jul' then '07'
when 'Aug' then '08'
when 'Sep' then '09'
when 'Oct' then '10'
when 'Nov' then '11'
else '12'
end
)
+'-01'

return @tmp
end
go

--查询
select * from TABLE where *=* order by dbo.f_convert(PERIOD)
luyisir2 2005-09-20
  • 打赏
  • 举报
回复
up
luyisir2 2005-09-20
  • 打赏
  • 举报
回复
上面两位大虾似乎只对特定的数据进行格式化,现在的需求是按照这个字段(假如叫做PERIOD)来排序,比如:
select * from TABLE where *=* order by PERIOD
由于PERIOD是string型的,这样排序不能达到想要的结果,我想问的是能否对上面这个sql语句做简单的变化,使达到想要的结果,比如:
select * from TABLE where *=* order by toDate(PERIOD)
wgsasd311 2005-09-20
  • 打赏
  • 举报
回复
set dateformat dmy
SET LANGUAGE us_english
declare @aa datetime
set @aa=cast('01-'+'sep-2005' as datetime)
SET LANGUAGE N'简体中文'
print @aa
wgsasd311 2005-09-20
  • 打赏
  • 举报
回复
SET LANGUAGE us_english
declare @aa datetime
set @aa=cast('01-sep-2005' as datetime)
SET LANGUAGE N'简体中文'
print @aa
vivianfdlpw 2005-09-20
  • 打赏
  • 举报
回复
declare @str varchar(10)
set @str='SEP-2005'
select right(@str,4)
+'-'
+(case left(@str,charindex('-',@str)-1)
when 'Jan' then '01'
when 'Feb' then '02'
when 'Mar' then '03'
when 'Apr' then '04'
when 'May' then '05'
when 'Jun' then '06'
when 'Jul' then '07'
when 'Aug' then '08'
when 'Sep' then '09'
when 'Oct' then '10'
when 'Nov' then '11'
else '12'
end
)
+'-01'

34,590

社区成员

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

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