这条SQL语句怎么改才正确?

sagegz 2010-06-05 09:58:35

SELECT * FROM TBL_BorrowInfo
WHERE DATEDIFF(dd,(DATEADD("m",1,BorrowDate),111)),GETDATE()) > 0

这条语句的意思就是找出TBL_BorrowInfo表中过期一个月的记录。
一个月的时间的定义:
例如2010-5-31号借出,则应还书日期为2010-6-31
2010-2-1号借出,则应还书日期为2010-3-1

这条语句的报错信息:
',' 附近有语法错误。

怎么改这条语句才会实现这个功能呢?
...全文
150 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
htl258_Tony 2010-06-06
  • 打赏
  • 举报
回复
路过,只能帮顶了
andy_liucj 2010-06-06
  • 打赏
  • 举报
回复
SELECT * FROM TBL_BorrowInfo 
WHERE DATEDIFF(dd,DATEADD(m,1,BorrowDate),GETDATE()) > 0

上面的有人把字段写成LastUpdateDate,可能考虑续借之类的情况
sagegz 2010-06-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dawugui 的回复:]
引用 10 楼 sagegz 的回复:
为什么呢?小弟愚笨,请人解释...
DATEDIFF(mm,BorrowDate,GETDATE()) > 1
这条语句把现在的时间与借书的时间相减大于一个月就已经说明过期了,难道还有别的情况?

今天是6.5

3.5,4.5借的,大于一个月,算.
这里用:DATEDIFF(mm,BorrowDate,GETDATE()) > 1
--这……
[/Quote]
谢谢毓华哥哥我终于懂了!
也谢谢Tony帮顶了.分都给毓华了哈!
dawugui 2010-06-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sagegz 的回复:]
为什么呢?小弟愚笨,请人解释...
DATEDIFF(mm,BorrowDate,GETDATE()) > 1
这条语句把现在的时间与借书的时间相减大于一个月就已经说明过期了,难道还有别的情况?
[/Quote]
今天是6.5

3.5,4.5借的,大于一个月,算.
这里用:DATEDIFF(mm,BorrowDate,GETDATE()) > 1
--这个是指时间大于1个月的.

5.4借的,和今天月份差是一个月,但是4<5,所以算超过一个月.
5.5借的,刚好一个月,不算.
5.6借的,和今天月份差是一个月,但是6>5,不算一个月.
这里用:(DATEDIFF(mm,BorrowDate,GETDATE()) = 1 and right(convert(varchar(10),BorrowDate,120),5) < right(convert(varchar(10),GETDATE(),120),5))
--这个是指时间相差一个月,但是日期必须小于当前日期.
sagegz 2010-06-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dawugui 的回复:]
引用 8 楼 sagegz 的回复:
这2条语句只要用其一就行吧!还是必须2条合在一起用?
必须两个同时用,因为是两个不同的条件.
[/Quote]
为什么呢?小弟愚笨,请人解释...
DATEDIFF(mm,BorrowDate,GETDATE()) > 1
这条语句把现在的时间与借书的时间相减大于一个月就已经说明过期了,难道还有别的情况?
dawugui 2010-06-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sagegz 的回复:]
这2条语句只要用其一就行吧!还是必须2条合在一起用?[/Quote]
必须两个同时用,因为是两个不同的条件.
sagegz 2010-06-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dawugui 的回复:]
你试试不就知道了.

DATEDIFF(mm,BorrowDate,GETDATE()) > 1
--这个是指时间大于1个月的.

(DATEDIFF(mm,BorrowDate,GETDATE()) = 1 and right(convert(varchar(10),BorrowDate,120),5) < right(convert(varchar(10),GETDATE(),120……
[/Quote]
这2条语句只要用其一就行吧!还是必须2条合在一起用?
dawugui 2010-06-05
  • 打赏
  • 举报
回复
你试试不就知道了.

DATEDIFF(mm,BorrowDate,GETDATE()) > 1
--这个是指时间大于1个月的.

(DATEDIFF(mm,BorrowDate,GETDATE()) = 1 and right(convert(varchar(10),BorrowDate,120),5) < right(convert(varchar(10),GETDATE(),120),5))
--这个是指时间相差一个月,但是日期必须小于当前日期.
sagegz 2010-06-05
  • 打赏
  • 举报
回复
希望有人能解释下毓华的代码...
1F和2F的代码我试了,提示说:
列名 'LastUpdateDate' 无效。(我的表中没有这个LastUpdateDate)
请问这个列名是什么意思?
sagegz 2010-06-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dawugui 的回复:]
SQL code
SELECT * FROM TBL_BorrowInfo
WHERE DATEDIFF(mm,BorrowDate,GETDATE()) > 1
or (DATEDIFF(mm,BorrowDate,GETDATE()) = 1 and right(convert(varchar(10),BorrowDate,120),5) < right(convert(varcha……
[/Quote]
毓华,你的我看不懂...嘻嘻!
没办法,我这是应付学校实验。过几天还要考试- -$
sagegz 2010-06-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 happyflystone 的回复:]
DATEDIFF(d,DATEADD(m,1,LastUpdateDate),GETDATE()) > 0
[/Quote]
LastUpdateDate是什么意思?为什么不是BorrowDate呢?
dawugui 2010-06-05
  • 打赏
  • 举报
回复
SELECT * FROM TBL_BorrowInfo 
WHERE DATEDIFF(mm,BorrowDate,GETDATE()) > 1
or (DATEDIFF(mm,BorrowDate,GETDATE()) = 1 and right(convert(varchar(10),BorrowDate,120),5) < right(convert(varchar(10),GETDATE(),120),5))


-狙击手- 2010-06-05
  • 打赏
  • 举报
回复
DATEDIFF(d,DATEADD(m,1,LastUpdateDate),GETDATE()) > 0
ShenLiang2025 2010-06-05
  • 打赏
  • 举报
回复


SELECT * FROM TBL_BorrowInfo
WHERE DATEDIFF(dd,(DATEADD(m,1,LastUpdateDate)),GETDATE()) > 0

34,593

社区成员

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

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