请教一个sql语句,高手请进!!!!!

flyelfsky 2003-09-24 09:41:00
在我的一个表中有一个nvarchar的子段,表示时间
create table test
(
dt nvarchar(20) not null
)
我想从该表中检索出三天以前的记录,并且把该子段转换为datetime类型的数据,
我该如何写呢?
...全文
12 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
penfe 2003-09-24
已阅。
回复
wfwater 2003-09-24
学习
回复
select * from test where isdate(dt) = 1 and datediff(day, cast(dt as datetime), getdate()) >= 3

select cast(dt as datetime) from test where isdate(dt) = 1

回复
zjcxc 元老 2003-09-24
你的表中,具有不规范的数据,不能转换成日期型,改一下:

select convert(datetime,dt) from test where case when isdate(dt)=1 then datediff(day,dt,getdate()) else 0 end>3
回复
flyelfsky 2003-09-24
我的数据格式是这么定义的:'2003-09-24 12:23:43'
回复
yujohny 2003-09-24
你的数据格式是什么样的,是不是不符合"2003-03-21"或“20030321”这两种格式呢?
回复
zjcxc 元老 2003-09-24
你的表中,具有不规范的数据,不能转换成日期型,改一下:

select convert(datetime,dt) from test where case when isdate(dt)=1 then datediff(day,dt,getdate()) else 0)>3
回复
将你的数据格式具体帖出来,20位是如何定义的。
回复
flyelfsky 2003-09-24
另外请各位兄弟帮忙一下这个贴子
http://expert.csdn.net/Expert/topic/2269/2269995.xml?temp=.1662866
回复
flyelfsky 2003-09-24
我用了各位兄弟的语句,但是查询分析器返回错误说:
将 expression 转换为数据类型 datetime 时发生算术溢出错误。
这是为什么呢?
回复
pengdali 2003-09-24
当你与时间类型比较的时候sqlserver会自己隐式转化。
回复
txlicenhe 2003-09-24
1:
select * from 表 where datediff(day,dt,getdate())>3
2:
alter table 表 alter column dt datetime
回复
zjcxc 元老 2003-09-24
select convert(datetime,dt) from test where datediff(day,dt,getdate())>3
回复
zjcxc 元老 2003-09-24
select convert(datetime,dt) from test where datediff(day,dt,getdate())>3
回复
select * from test where datediff(day, cast(dt as datetime), getdate()) >= 3

select cast(dt as datetime) from test
回复
pengdali 2003-09-24
select * from test where datediff(day,dt,getdate())=3
回复
yujohny 2003-09-24
检索出三天以前的记录
select * from 表 where datediff(dd,convert(datetime,dt),getdate())>3
子段转换为datetime类型的数据,
alter table 表 alter column dt datetime

回复
flyelfsky 2003-09-24
经过仔细检查,终于发现原来我的记录中有一个记录不符合
谢谢各位
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2003-09-24 09:41
社区公告
暂无公告