Вопрос о дате SQL - PullRequest
       3

Вопрос о дате SQL

3 голосов
/ 29 июля 2011

У меня есть вопрос.У меня есть таблица SQL Server 2008 с полем столбца.У меня есть, например, следующие даты:

1/1/2001
5/5/2004
8/5/2009
10/7/2011
5/5/2012
1/13/2014

Мне бы хотелось, чтобы можно было отображать все даты> = текущую дату (7/29/2011), а также самую большую дату таблицы, которая <текущая дата.В этом примере результатом будут все даты <code>>= 8/5/2009.

Может кто-нибудь помочь мне, пожалуйста?

Ответы [ 7 ]

4 голосов
/ 29 июля 2011
select max(date) [date] from table where date < getdate()
union 
select date from table where date >= getdate()
3 голосов
/ 29 июля 2011

Если я правильно понимаю, вы хотите включить дату до текущей даты. GETDATE () получит текущую дату (со временем). Если вы в порядке с этим, то это должно сработать. В противном случае вам, возможно, придется проанализировать только дату из GETDATE ()

SELECT TheDate
FROM DateTable
WHERE TheDate >= (SELECT MAX(TheDate) FROM DateTable WHERE TheDate < GETDATE())

Получает все даты, которые больше или равны самой последней дате до текущей даты.

0 голосов
/ 29 июля 2011

Здесь много догадок на основе свободного повествовательного и неизвестного типов данных.

DECLARE @t TABLE(d DATE);

INSERT @t SELECT '20010101'
UNION ALL SELECT '20040505'
UNION ALL SELECT '20090805'
UNION ALL SELECT '20111007'
UNION ALL SELECT '20120505'
UNION ALL SELECT '20140113';

DECLARE @now DATE = SYSDATETIME();

WITH t AS
(
    SELECT d, rn = ROW_NUMBER() OVER (ORDER BY d)
    FROM @t
)
SELECT t.d
    FROM t LEFT OUTER JOIN t AS x
    ON t.rn = x.rn - 1
    WHERE COALESCE(x.d, @now) >= @now
    ORDER BY t.d;
0 голосов
/ 29 июля 2011
SELECT d1.*
FROM dates d1
  LEFT JOIN dates d2 ON d1.Date < d2.Date AND d2.Date < GETDATE()
WHERE d2.Date IS NULL

Пояснение:

Выберите каждую дату, для которой не существует даты, которая раньше, чем сегодня, и позже, чем проверяемая.

0 голосов
/ 29 июля 2011

Это зависит от используемого вами сервера SQL.Например, в postgres вам нужно что-то вроде

SELECT fields FROM table WHERE date_field >= CURRENT_DATE - 1

Но другие SQL-серверы могут по-разному определять «вчера»

0 голосов
/ 29 июля 2011

Предполагая, что ваша таблица называется DateTable, а ваше поле называется TheDate, сделайте это следующим образом:

SELECT TheDate
FROM DateTable
WHERE TheDate >= DATEADD(d, -2, GETDATE())

Удачи!

0 голосов
/ 29 июля 2011

Я не совсем уверен, что понимаю, но это похоже на МЕЖДУ соответствующими датами. Или мне чего-то не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...