我有此作业要解决:“选择从今天开始余额大于1000并且到期日期小于2天的行。”
我已经尝试过:
SELECT FROM Account
WHERE Balance > 1000
AND ExpirationDate < DateAdd(getDate(), D, -2);
create table Account (
ID int,
Owner char(40),
Balance float,
CreationDate datetime,
ExpirationDate datetime
)
insert into Account (ID, Owner, Balance, CreationDate, ExpirationDate) values
(1 , 'Frank Lampard', 2000, '2006-06-01', '2022-03-01'),
(2 , 'Mike Lincoln', 1500, '2007-05-15', '2022-10-01'),
(3 , 'Matt Fraser', 4000, '2011-12-11', '2021-003-01'),
(4 , 'John Mc Donald', 3000, '2012-05-02', '2023-01-01'),
(5 , 'Elena Svitolina', 2800, '2007-02-06', '2022-04-01'),
(6 , 'Naomy Osaka', 5000, '2008-02-21', '2022-03-01'),
(7 , 'Jean Valjean', 1500, '20011-07-11', '2021-04-01'),
(8 , 'Adrian Svenson', 4500, '2009-08-20', '2024-05-01'),
(9 , 'Johnny Cash', 4000, '2010-05-11', '2021-01-01'),
(10 , 'Dan Simons', 2000, '2011-07-22', '2022-10-01');
我希望输出显示为:
选择从今天起余额大于1000并且到期日期小于2天的行
输出为:
错误1:无法准备语句(“ FROM”附近的1:语法错误)
答案 0 :(得分:0)
首先,要解决您遇到的错误,请注意您缺少选择列表。
其次,您以错误的顺序输入了DateAdd
的参数:
SELECT *
-- Here^
FROM Account
WHERE Balance > 1000 AND ExpirationDate < DateAdd(d, -2, GetDate())
答案 1 :(得分:0)
由于getdate()
具有时间成分,而示例数据没有,因此我将“从今天起不到2天”解释为没有时间成分的比较。我认为适当的逻辑是:
SELECT a.*
FROM Account a
WHERE a.Balance > 1000 AND
a.ExpirationDate < DateAdd(day, -2, CONVERT(date, getDate()));
注意:
a
)SELECT
中添加缺少的表达式)。day
而不是d
),也是一种最佳做法。编辑:
上面的语法对于SQL Server来说很好,这似乎就是您想要的。但是,如果您不使用SQL Server,它将无法正常工作(可能)。标准语法为:
SELECT a.*
FROM Account a
WHERE a.Balance > 1000 AND
a.ExpirationDate < CURRENT_DATE - INTERVAL '2 day';