假设我有一个日期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)
但失败了。
答案 0 :(得分:18)
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。
SELECT *
FROM TABLE t
WHERE t.date BETWEEN DATEADD(dd, -1, '2010-07-29')
AND '2010-07-29'
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;