SQL日期问题

时间:2011-07-29 15:32:18

标签: sql sql-server-2008

我有一个问题。我有一个带有字段列的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

有人可以帮我指导吗?

7 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

如果我理解正确,您希望包含当前日期之前的日期。 GETDATE()将获得当前日期(随时间)。如果你没关系,那么这应该有效。否则,您可能只需解析GETDATE()

中的日期
SELECT TheDate
FROM DateTable
WHERE TheDate >= (SELECT MAX(TheDate) FROM DateTable WHERE TheDate < GETDATE())

这会使所有日期大于或等于当前日期之前的最近日期。

答案 2 :(得分:0)

我不完全确定我理解,但这看起来像是相关日期之间的关系。或者还有什么我想念的东西?

答案 3 :(得分:0)

假设您的表名为DateTable并且您的字段名为TheDate,请执行以下操作:

SELECT TheDate
FROM DateTable
WHERE TheDate >= DATEADD(d, -2, GETDATE())
祝你好运!

答案 4 :(得分:0)

这取决于您正在使用的SQL服务器。例如,在postgres中,你需要像

这样的东西
SELECT fields FROM table WHERE date_field >= CURRENT_DATE - 1

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

答案 5 :(得分:0)

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

说明:

  

选择不存在日期的日期,该日期早于今天且晚于正在检查的日期。

答案 6 :(得分:0)

基于松散的叙述和未知的数据类型,这里有很多猜测。

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;