我的数据库中有我可以这样过滤的日期:
select *
where
a.y=2021 and a.m=2 and a.d=7
但是,如果我明天运行这个查询,我就必须去那里手动更改。
是否有一种方法可以自动做到这一点,如果我明天运行查询,我会得到d=8和d=9等后的一天?
我尝试使用get date,但我得到以下错误:
SQL Error [6]: Query failed (#20210207_153809_06316_2g4as): line 2:7: Function 'getdate' not registered
我也不知道这是否是正确的解决方案。有人知道怎么解决吗?
您可以使用NOW
获取当前日期,并使用YEAR
,MONTH
,DAY
获取部分日期
SELECT *
FROM [TABLE]
WHERE a.y=YEAR(NOW()) and a.m=MONTH(NOW()) and a.d=DAY(NOW())
最好的解决方案是在数据中使用date
列。然后你可以使用:
where datecol = current_date
或者您的特定数据库使用的当前日期。
如果没有这个,你必须把当前日期分成几个部分。在标准SQL中,这看起来像:
where y = extract(year from current_date) and
m = extract(month from current_date) and
d = extract(day from current_date)
也就是说,日期函数因数据库而异,因此确切的语法取决于您的数据库。
例如,在SQL Server中这样写是很常见的:
where y = year(getdate()) and
m = month(getdate()) and
d = day(getdate())