Сравнение даты SQL без текущего месяца - PullRequest
2 голосов
/ 22 октября 2010

У меня есть таблица в Access со строковыми столбцами и столбцом даты.Я хочу получить все строки из таблицы, когда дата ниже 22.10.2010, кроме этого месяца.Итак, мне нужны строки с 30.09.2010 по ...

Я что-то связал, но понял, что это неправильно:

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

Но это решение не очень хорошее, и японятия не имею.Не могли бы вы помочь мне с общим решением, пожалуйста?Спасибо

Ответы [ 6 ]

1 голос
/ 22 октября 2010

ВЫБРАТЬ имя из таблицы ГДЕ (ГОД (дата) <2010) ИЛИ (ГОД (дата) = 2010 И МЕСЯЦ (дата) <10) </p>

1 голос
/ 22 октября 2010

Нулевой день месяца - последний день предыдущего месяца:

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

Таким образом:

 SELECT [name] FROM [table] 
 WHERE [date]<=DateSerial(Year(Date()),Month(Date()),0)
1 голос
/ 22 октября 2010

Доступ

Соедините год, месяц и «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)
0 голосов
/ 01 марта 2016

Можно использовать следующие функции. Они даже работают на високосные годы.

'Если вы сдадите # 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
0 голосов
/ 22 октября 2010
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#);
0 голосов
/ 22 октября 2010

вы вычитаете количество дней в месяце и используете эту дату для сравнения

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

Приведенный выше запрос выдаст вам все записи до конца последнего дня прошлого месяца.

Приветствие.

...