sql字符串转换日期

yooono 2007-04-10 11:48:29
类似“2006年8月15日”这样在sqlsever数据库以字符串方式存放,请问如何把他在查询的时候转换成日期型。譬如查询所有2006年6月3日以前的该怎么写?
...全文
4393 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sp4 2007-04-11
  • 打赏
  • 举报
回复
2006年8月15日这样存放非常糟糕,而且很不容易比较
个人建议修改
zsforever 2007-04-11
  • 打赏
  • 举报
回复
显示成“2006/11/1”是你数据默认日期显示方式的问题,想改变可以用convert(varchar(10),datecolumn,120)来改变

declare @s varchar(16)
set @s = '2006年8月15日'
select convert(datetime,case when isdate(replace(replace(replace(@s,'年','-'),'月','-'),'日',''))=1 then replace(replace(replace(@s,'年','-'),'月','-'),'日','') else '' end )
yooono 2007-04-10
  • 打赏
  • 举报
回复
有没有一个强壮的方法,把这些不能转换的值直接当成1900年1月1日看待
yooono 2007-04-10
  • 打赏
  • 举报
回复
虎虎的没对空值和其他杂乱的值进行处理。
这个数据库是些老数据,有的地方直接存成了“年月日”有的还存成了“2006/11/1”
dawugui 2007-04-10
  • 打赏
  • 举报
回复
zsforever(虎虎) ( ) 信誉:100 Blog 加为好友 2007-04-10 11:53:51 得分: 0


select convert(datetime,replace(replace(replace('2006年8月15日','年','-'),'月','-'),'日',''))


这个好.
gahade 2007-04-10
  • 打赏
  • 举报
回复
直接比较不行吗?
select * from 表 where 字段<'2006年6月3'

select * from 表 where cast(replace(replace(replace('2006年8月15日','年','-'),'月','-'),'日','') as datetime)<'2006-6-3'
zsforever 2007-04-10
  • 打赏
  • 举报
回复
select convert(datetime,replace(replace(replace('2006年8月15日','年','-'),'月','-'),'日',''))

34,590

社区成员

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

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