簡體   English   中英

SQL日期問題

[英]SQL date question

我有個問題。 我有一個帶有字段列的SQL Server 2008表。 我有以下日期:

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

我希望能夠顯示所有日期> =當前日期( 7/29/2011日)以及<當前日期的最大表日期。 在此示例中,結果將是所有日期>= 8/5/2009

有人可以幫我指點嗎?

select max(date) [date] from table where date < getdate()
union 
select date from table where date >= getdate()

如果我理解正確,您希望包括當前日期之前的日期。 GETDATE()將獲得當前日期(隨時間)。 如果你沒關系,那么這應該有效。 否則,您可能只需解析GETDATE()中的日期

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

這會使所有日期大於或等於當前日期之前的最近日期。

我不完全確定我理解,但這看起來像是在相關日期之間。 還是有更多我想念的東西?

假設您的表名為DateTable,並且您的字段名為TheDate,請執行以下操作:

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

祝好運!

這取決於您正在使用的SQL服務器。 例如,在postgres中,你需要類似的東西

SELECT fields FROM table WHERE date_field >= CURRENT_DATE - 1

但是其他SQL服務器有不同的方式來指定“昨天”

SELECT d1.*
FROM dates d1
  LEFT JOIN dates d2 ON d1.Date < d2.Date AND d2.Date < GETDATE()
WHERE d2.Date IS NULL

說明:

選擇不存在日期的日期,該日期早於今天,晚於正在檢查的日期。

基於松散的敘述和未知的數據類型,這里有很多猜測。

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM