2

我在 Access 中有一个包含字符串列和日期列的表。当日期低于 22.10.2010 时,我想从表中获取所有行,本月除外。所以,我需要从 30.09.2010 到 ...

我绑了一些东西,但我发现它不对:

SELECT name FROM table WHERE YEAR(date)<=2010 AND MONTH(date)<10

但是这个解决方案并不好,我没有其他想法。你能帮我一个通用的解决方案吗?谢谢

4

6 回答 6

1

使用权?

将年、月和“1”(以获取 月的第一天date)串在一起并将其转换为Date.

SELECT  *
FROM    MyTable
WHERE   dateColumn 
           < CDate(CStr(YEAR(date)) + "-" + CStr(MONTH(date)) + "-1")

SQL

DAY从日期中减去相关日期的(减一),得到该月的第一天。然后返回小于该值的所有行。

DECLARE @date DATE
SET @date = GETDATE()DECLARE

SELECT  *
FROM    MyTable
WHERE   dateColumn 
           < DATEADD(DAY, -( DATEPART(DAY, @date) - 1 ), @date)
于 2010-10-22T12:54:46.467 回答
1

一个月的第 0 天是上个月的最后一天:

DateSerial(Year(Date()),Month(Date()),0)

所以:

 SELECT [name] FROM [table] 
 WHERE [date]<=DateSerial(Year(Date()),Month(Date()),0)
于 2010-10-22T13:06:34.620 回答
1

从表中选择名称 WHERE ( YEAR(date)<2010 ) OR ( YEAR(date)=2010 AND MONTH(date)<10 )

于 2010-10-22T13:10:31.693 回答
0

您减去到目前为止该月的天数并使用该日期进行比较

Select myName FROM myTable Where myTable.myDate <=DateAdd("d",-Day(Now()),Now());

上面的查询将为您提供直到上个月最后一天结束的所有记录。

干杯。

于 2010-10-22T13:32:30.490 回答
0
SELECT you_col
  FROM YourTable
 WHERE your_date 
          < DATEADD('M', 
              DATEDIFF('M', #1990-01-01 00:00:00#, NOW()
          ), #1990-01-01 00:00:00#);
于 2010-10-22T14:21:28.810 回答
0

可以使用以下功能。这些甚至适用于闰年。

'如果你通过 #2016/01/20# 你会得到 #2016/01/31#

Public Function GetLastDate(tempDate As Date) As Date
    GetLastDate = DateSerial(Year(tempDate), Month(tempDate) + 1, 0)
End Function

'如果你通过 #2016/01/20# 你得到 31

Public Function GetLastDay(tempDate As Date) As Integer
    GetLastDay = Day(DateSerial(Year(tempDate), Month(tempDate) + 1, 0))
End Function
于 2016-02-29T21:08:10.153 回答