┗━━┛高分: 求几个SQL条件语句,来看看吧┏━━┓

gump2000 2002-06-08 11:04:10
数据库:Access

字段:日期型

要求得到以下条件:

昨天
今天
明天
上周
本周
下周
上月
本月
下月

能简单就简单
...全文
539 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yang_ 2002-06-12
  • 打赏
  • 举报
回复
>>使用SQL函数和不使用SQL函数的速度哪个快呢?
不使用SQL函数的速度快,特别是在这个字段有索引的情况。
>>Between and 和 >= and <=比较哪个速度快呢?
这两个速度是一样的。
gump2000 2002-06-11
  • 打赏
  • 举报
回复
上面的是第二个版本了,第一次我是用
DateValue函数来做的

比如,今天
datevalue(fld1)=#2002-2-2#

上周:
datevalue(fld1) between ... and ...


使用SQL函数和不使用SQL函数的速度哪个快呢?
(我认为该是不使用的快)

Between and 和 >= and <=比较哪个速度快呢?
gump2000 2002-06-11
  • 打赏
  • 举报
回复
Case "昨天"
dteTemp = DateAdd("d", -1, Date)
strChild = strField & ">= #" & dteTemp & "# AND " & _
strField & " < #" & DateAdd("d", 1, dteTemp) & "#"
Case "今天"
dteTemp = Date
strChild = strField & ">= #" & dteTemp & "# AND " & _
strField & " < #" & DateAdd("d", 1, dteTemp) & "#"
Case "上周"
dteTemp = DateAdd("ww", -1, Date)
dteTemp = DateAdd("d", 1 - Weekday(dteTemp, vbMonday), dteTemp)
strChild = strField & ">= #" & dteTemp & "# AND " & _
strField & " < #" & DateAdd("ww", 1, dteTemp) & "#"
Case "本周"
dteTemp = Date
dteTemp = DateAdd("d", 1 - Weekday(dteTemp, vbMonday), dteTemp)
strChild = strField & ">= #" & dteTemp & "# AND " & _
strField & " < #" & DateAdd("ww", 1, dteTemp) & "#"
Case "上一月"
dteTemp = DateAdd("m", -1, Date)
dteTemp = DateAdd("d", 1 - Day(dteTemp), dteTemp)
strChild = strField & ">= #" & dteTemp & "# AND " & _
strField & " < #" & DateAdd("m", 1, dteTemp) & "#"
Case "本月"
dteTemp = Date
dteTemp = DateAdd("d", 1 - Day(dteTemp), dteTemp)
strChild = strField & ">= #" & dteTemp & "# AND " & _
strField & " < #" & DateAdd("m", 1, dteTemp) & "#"

这是我自己写的,为什么不用Between?因为between还需要在最大值中加上
23:59:59,所以,就用了>= and <
junwhj 2002-06-10
  • 打赏
  • 举报
回复
以今天为基准的上周是如何表示的?
================================================================

函数now()返回的就是今天的日期,你是二星用户,不用我说得那么详细吧!

select * form table where cdate(format(你的日期字段名,'yyyy-mm-dd')) between (now()-datepart('w',now())-6) and (now()-datepart('w',now()))
feihong0233 2002-06-08
  • 打赏
  • 举报
回复
Dim a As Date
Dim b As Date
a = Now + (32 - CLng(Format(Now, "dd")))
b='LASTLOGIN'
if format(a,"yyyy/mm")=format(b,"yyyy/mm") then
msgbox "下个月"
end if
junwhj 2002-06-08
  • 打赏
  • 举报
回复
昨天:
select d-1 from testtable

今天:
select d from testtable

明天:
select d+1 from testtable

上周:
Set rs = cn.Execute("select d-datepart('w',d)-6,d-datepart('w',d) from testtable")

select dateadd('ww',-1,d-datepart('w',d)+1,),dateadd('ww',-1,d-datepart('w',d)+7) from testtable

本周:
select d-datepart('w',d)+1,d-datepart('w',d)+7 from testtable

下周:
select d-datepart('w',d)+8,d-datepart('w',d)+14 from testtable

select dateadd('ww',1,d-datepart('w',d)+1,),dateadd('ww',1,d-datepart('w',d)+7) from testtable

上月:
select dateadd('m',-1,d-datepart('d',d)+1),d-datepart('d',d) from testtable

本月:
select d-datepart('d',d)+1,dateadd('m',1,d-datepart('d',d)) from testtable

下月:
select dateadd('m',1,d-datepart('d',d)+1),dateadd('m',2,d-datepart('d',d)) from testtable
softrain 2002-06-08
  • 打赏
  • 举报
回复
刚才字段没有统一,统一一下就可以了.
gump2000 2002-06-08
  • 打赏
  • 举报
回复
还有其它的吗?
gump2000 2002-06-08
  • 打赏
  • 举报
回复
改改
=============================
select case combo1.text
case "昨天"
sql= "select * from table where YEAR(xdate1) = YEAR({ fn NOW() }) and MONTH(date) = MONTH({ fn NOW() })and day(date)=DAY({ fn NOW() })-1 "
case "今天"
sql= "select * from table where YEAR(xdate1) = YEAR({ fn NOW() }) and MONTH(date) = MONTH({ fn NOW() })and day(date)=DAY({ fn NOW() })"
case "明天"
sql= "select * from table where YEAR(xdate1) = YEAR({ fn NOW() }) and MONTH(date) = MONTH({ fn NOW() }) and day(date)=DAY({ fn NOW() })+1"
case "上月"
sql= "select * from table where YEAR(xdate1) = YEAR({ fn NOW() }) -1 and MONTH(date) = MONTH({ fn NOW() })-1'"
case "本月"
sql= "select * from table where YEAR(xdate1) = YEAR({ fn NOW() }) and MONTH(date) = MONTH({ fn NOW() })"
case "下月"
sql= "select * from table where YEAR(xdate1) = YEAR({ fn NOW() })+1 and MONTH(date) = MONTH({ fn NOW() })+1"
gump2000 2002-06-08
  • 打赏
  • 举报
回复
难道大家都没有看懂?
再解释一下
======================
比如字段名为 LASTLOGIN

那么,“今天”的条件就是
LASTLOGIN在今天时间范围内的内容
“明天”就是LASTLOGIN在明天时间范围内的内容
其它雷同

明白?
softrain 2002-06-08
  • 打赏
  • 举报
回复
select case combo1.text
case "昨天"
sql= "select * from table where YEAR(xdate1) > YEAR({ fn NOW() }) and MONTH(date) = MONTH({ fn NOW() })and day(date)=DAY({ fn NOW() })-1 "
case "今天"
sql= "select * from table where YEAR(xdate1) > YEAR({ fn NOW() }) and MONTH(date) = MONTH({ fn NOW() })and day(date)=DAY({ fn NOW() })"
case "明天"
sql= "select * from table where YEAR(xdate1) > YEAR({ fn NOW() }) and MONTH(date) = MONTH({ fn NOW() }) and day(date)=DAY({ fn NOW() })+1"
case "上月"
sql= "select * from table where YEAR(xdate1) > YEAR({ fn NOW() }) -1 and MONTH(date) = MONTH({ fn NOW() })-1'"
case "本月"
sql= "select * from table where YEAR(xdate1) > YEAR({ fn NOW() }) and MONTH(date) = MONTH({ fn NOW() })"
case "下月"
sql= "select * from table where YEAR(xdate1) = YEAR({ fn NOW() })+1 and MONTH(date) = MONTH({ fn NOW() })+1"
真够累的!
星期比较麻烦,等闲时再答吧.

gump2000 2002-06-08
  • 打赏
  • 举报
回复
我想您还是没有明白我的意思:)

更何况,您的SQL语句条件存在着问题(很大的问题)

您的条件中,以今天为基准的上周是如何表示的?
junwhj 2002-06-08
  • 打赏
  • 举报
回复
这样总可以了吧!
select * form table where cdate(format(d,'yyyy-mm-dd')) between (d-datepart('w',d)-6) and (d-datepart('w',d))
gump2000 2002-06-08
  • 打赏
  • 举报
回复
日期中还包括了时间信息的
gump2000 2002-06-08
  • 打赏
  • 举报
回复
我想您考虑的时候漏了什么,比如
一个时间为 2002-03-04 12:56:11
您这样的计算方法的话

昨天: d-1
那么必须是时间= 2002-03-03 12:56:11

明白否?

junwhj 2002-06-08
  • 打赏
  • 举报
回复
举个例子,查询上周的所有记录:
select * form table where d between (d-datepart('w',d)-6) and (d-datepart('w',d))
gump2000 2002-06-08
  • 打赏
  • 举报
回复
我的意思是返回这个表的全部记录(全部字段)
条件是:这个字段的时间范围是一上列出的

比如:返回字段的时间是今天的所有记录
junwhj 2002-06-08
  • 打赏
  • 举报
回复
to gump2000(阿甘):
我的程序经过测试的,可询语句中的d是日期字段,你试试吧,花了我不少时间,该加分了吧!
gump2000 2002-06-08
  • 打赏
  • 举报
回复
to junwhj() :
你的方法行吗?...:)
warmworm 2002-06-08
  • 打赏
  • 举报
回复
同意junwhj的
加载更多回复(1)

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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