如何在指定日期前一天获得?

时间:2010-07-29 20:41:50

标签: sql

假设我有一个日期2010-07-29。现在我想查看前一天的结果。该怎么做

例如,

SELECT * 
  from table 
 where date = date("2010-07-29")

前一天如何做而不更改字符串“2010-07-29”?

我搜索并从网上获得了一些建议,然后我尝试了

SELECT * 
  from table 
 where date = (date("2010-07-29") - 1 Day)

但失败了。

5 个答案:

答案 0 :(得分:18)

的MySQL

SELECT * 
  FROM TABLE t
 WHERE t.date BETWEEN DATE_SUB('2010-07-29', INTERVAL 1 DAY)
                  AND '2010-07-29'

如果您想添加一天(并反转BETWEEN参数),请将DATE_SUB更改为DATE_ADD

SQL Server

SELECT *
  FROM TABLE t
 WHERE t.date BETWEEN DATEADD(dd, -1, '2010-07-29')
                  AND '2010-07-29'

的Oracle

SELECT *
  FROM TABLE t
 WHERE t.date BETWEEN TO_DATE('2010-07-29', 'YYYY-MM-DD') - 1
                  AND TO_DATE('2010-07-29', 'YYYY-MM-DD')

我使用了BETWEEN,因为date列可能是DATETIME(在MySQL& SQL Server上,与Oracle上的DATE相比),其中包括时间部分,因此等于意味着值必须完全相等。这些查询为您提供了一天的时间。

答案 1 :(得分:1)

如果您使用的是Oracle,则可以使用+和 - 运算符为日期添加若干天。

http://psoug.org/reference/date_func.html

示例:

SELECT SYSDATE  +  1 FROM dual;

将产生明天的日期。

如果您使用Oracle,请告诉您使用的是什么,以便我们提供更好的答案。这种事情取决于您使用的数据库。不同的数据库不会相同。

答案 2 :(得分:0)

如果您正在使用MSSQL,那么您正在寻找DateAdd()我对语法有点模糊,但它的内容如下:

Select * //not really, call out your columns
From [table]
Where date = DateAdd(dd, -1, "2010-07-29",)

编辑:此语法应该是正确的:它已更新以响应评论。
我可能会以错误的顺序排列特定的参数,但这应该可以帮到那里。

答案 3 :(得分:0)

取决于RDBMS上可用的DateTime函数

对于Mysql,您可以尝试:

mysql> SELECT DATE_ADD('1997-12-31',
->                 INTERVAL 1 DAY);


mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
    -> '1997-12-02'

答案 4 :(得分:0)

在PL SQL中: select sysdate+1 from dual;