[英]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.