sql查询选择周,月,日

时间:2011-02-24 07:30:34

标签: sql ms-access vb6

拜托,伙计们,我需要一个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;

我已经弄清楚的问题是如何指定比较中的两个日期

3 个答案:

答案 0 :(得分:2)

Date()函数将返回当前时间戳。使用ms-access date函数从那里向后/向前工作,例如:

DateAdd("m",2,Date())

在当前日期添加两个月。检查this reference

答案 1 :(得分:1)

请参阅:

Why should I consider using an auxiliary calendar table?

该文章的代码专门针对SQL Server,但这些技术可以移植到大多数SQL平台(甚至是MS Access :)。这个想法是SQL是一种声明性语言,并且有利于数据驱动的基于集合的解决方案而不是calucate - 程序上即时的方法。

您的企业所需的每一天都有一行,覆盖几十年不会太多(数千行)。这些日子中的每一天都会有firstoflastmonthfirstoflastweek等的值(请注意确保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提供的参考表