送高分,datediff问题!!!

sjmblue 2004-08-29 06:03:00
在使用datediff时,遇到这样的问题,datediff(ss,date1,date2),其中date2是用convert函数生成的,最后的形式是datediff(ss,'2004-8-21 00:00:00,convert(datetime,left()+'-'+..........')),但是这样使用之后,得不到结果,但是直接datediff(ss,‘date1’,‘date2’),其中date2为convert生成的结果,所以之前得不到结果是因为date2字符串没有单引号,请问应该怎么办,怎么才能给convert(datetime,left()+'-'+..........')加上单引号,使得整个datediff能正确运行???

多谢,高分相送!!!
...全文
150 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lilu207 2004-08-30
  • 打赏
  • 举报
回复
楼主,我建议你先将Releasetime这个字段处理成你需要的格式放在一个临时字段里,然后再做比较。
或者将前面的'2004-8-29 19:00:00'转换为字符串来比较字符串的大小
convert(varchar,'2004-8-29 19:00:00')>convertconvert(varchar,(left(Releasetime,4)+'-'+(right(left(Releasetime,6),2))+'-'+(right(left(Releasetime,8),2))+' '+(right(left(Releasetime,10),2))+':'+(right(left(Releasetime,12),2))+':'+(right(left(Releasetime,14),2))))
sjmblue 2004-08-29
  • 打赏
  • 举报
回复
其实就是要从一个表中搜出固定时间段的集合,很简单,却.....贴出原句,大家给看看:
select callerNo, calleeNo, Starttime, Answertime, Releasetime from tBillLog where datediff(ss, '2004-8-29 19:00:00', convert(datetime,(left(Releasetime,4)+'-'+(right(left(Releasetime,6),2))+'-'+(right(left(Releasetime,8),2))+' '+(right(left(Releasetime,10),2))+':'+(right(left(Releasetime,12),2))+':'+(right(left(Releasetime,14),2)))))>0 and datediff(ss,convert(datetime,(left(Releasetime,4)+'-'+(right(left(Releasetime,6),2))+'-'+(right(left(Releasetime,8),2))+' '+(right(left(Releasetime,10),2))+':'+(right(left(Releasetime,12),2))+':'+(right(left(Releasetime,14),2)))), '2004-8-29 20:00:00')>0

多谢
tx1icenhe 2004-08-29
  • 打赏
  • 举报
回复
问题在.......里,不写出来谁知道是什么

lilu207 2004-08-29
  • 打赏
  • 举报
回复
用cast
datediff(ss,convert(datetime,'2004-1-23 00:00:00'),cast(sj as datetime ))>0
lilu207 2004-08-29
  • 打赏
  • 举报
回复
select datediff(day,convert(datetime,'2004-8-21 00:00:00'),convert(datetime,left('2004-8-21',6)+'-'+ '22'))
这样返回的是天,楼主的程序返回的是秒
sjmblue 2004-08-29
  • 打赏
  • 举报
回复
多谢各位,可是select * from tbilllog where datediff(ss,'2004-08-01 00:00:00',convert(datetime,'.......'))>0 却无法得到相应的记录,而数据库中明明是有这些记录的,而且没有报语法错,只是出来空集,如果查select * from tbilllog where datediff(ss,'2004-08-01 00:00:00',convert(datetime,'.......'))<0的部分,到也能查处来,很奇怪,为什么了?convert的结果和datediff的结果都能单独弄出来,都是正确地!!!

多谢
tx1icenhe 2004-08-29
  • 打赏
  • 举报
回复
convert(datetime,left()+'-'+..........')的结果是日期型的,不用加单引号
你的问题是前面的少写了一个单引号
tx1icenhe 2004-08-29
  • 打赏
  • 举报
回复
比如:

select datediff(ss,'2004-8-21 00:00:00',convert(datetime,left('2004-8-21',6)+'-'+ '22'))

结果:

-----------
86400

(所影响的行数为 1 行)
solidpanther 2004-08-29
  • 打赏
  • 举报
回复
请参考如下:
select CONVERT(varchar(10), getDate(),120) --不要时间2002-1-1
select convert(char(8),getdate(),112) ----20020101
select convert(char(8),getdate(),108) ---06:05:05
tx1icenhe 2004-08-29
  • 打赏
  • 举报
回复
??
datediff(ss,'2004-8-21 00:00:00,convert(datetime,left()+'-'+..........'))
--〉
datediff(ss,'2004-8-21 00:00:00',convert(datetime,left()+'-'+ '..........'))

34,594

社区成员

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

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