拜托,伙计们,我需要一个SQL查询来使用vb6从访问数据库中选择数据。查询将仅提供当前日期,并且已经比较的字段是数据库中的curr_date。
例如
SELECT *
FROM TABLE
WHERE curr_date BETWEEN firstoflastmonth AND endoflasthmonth;
SELECT *
FROM TABLE
WHERE curr_date BETWEEN firstoflastweek AND endoflasthweek;
SELECT *
FROM TABLE
WHERE curr_date BETWEEN firstofthismonth AND endofthismonth;
SELECT *
FROM TABLE
WHERE curr_date BETWEEN firstofthsiweek AND tilldate;
我已经弄清楚的问题是如何指定比较中的两个日期
答案 0 :(得分:2)
答案 1 :(得分:1)
请参阅:
Why should I consider using an auxiliary calendar table?
该文章的代码专门针对SQL Server,但这些技术可以移植到大多数SQL平台(甚至是MS Access :)。这个想法是SQL是一种声明性语言,并且有利于数据驱动的基于集合的解决方案而不是calucate - 程序上即时的方法。
您的企业所需的每一天都有一行,覆盖几十年不会太多(数千行)。这些日子中的每一天都会有firstoflastmonth
,firstoflastweek
等的值(请注意确保tilldate
的含义);这些值一次生成一次,例如使用电子表格。然后,您可以使用标准SQL的JOIN
的{{1}},Access(ACE,Jet,无论如何)实现NOW()
到此表。
进一步注意,因为Access使用双浮点值来建模所有时态数据,所以CURRENT_TIMESTAMP
的性能操作通常是不合适的。所以不是这样:
BETWEEN
...而是使用此
SELECT *
FROM TABLE
WHERE curr_date BETWEEN firstoflastmonth AND endoflasthmonth;
答案 2 :(得分:1)
最简单的方法就是检查你希望它在哪个月/周?
从你的例子:
SELECT * FROM TABLE
WHERE curr_date BETWEEN firstoflastmonth AND endoflasthmonth;
这将成为(使用month函数)
SELECT * FROM TABLE
WHERE month(curr_date) = month(dateadd("m",-1,Date()));
将curr_date的月份与Date(当前日期)的月份减去一个月进行比较,即上个月。 这也可以使用datediff:
完成SELECT * FROM TABLE
WHERE DateDiff ( "m", curr_date, date()) = 1
AND curr_date < date();
添加最后一行以确保未选择一个月后的日期。
使用找到的日期函数here
可以将同样的事情应用于其他查询链接用于Richard Calahan提供的参考表