If语句SQL月日间隔

If语句SQL月日间隔,sql,vb.net,ms-access,Sql,Vb.net,Ms Access,我需要在“Contas”表中找到下一个账单(账单日期:5、15、25、28),问题是如果我们在第30天,“next”语句将找不到任何内容,它应该返回“5” 我试过了,但没有成功 $"IF EXISTS (SELECT * FROM Contas WHERE Dia >= {Dia_Atual_LB}) SELECT * FROM Contas WHERE Dia >= {Dia_Atual_LB} ELSE SELECT * FROM Contas WHERE Dia >= 0

我需要在“Contas”表中找到下一个账单(账单日期:5、15、25、28),问题是如果我们在第30天,“next”语句将找不到任何内容,它应该返回“5”

我试过了,但没有成功

$"IF EXISTS (SELECT * FROM Contas WHERE Dia >= {Dia_Atual_LB}) SELECT * FROM Contas WHERE Dia >= {Dia_Atual_LB} ELSE SELECT * FROM Contas WHERE Dia >= 0"
它返回:

System.Data.OleDb.OLEDBEException:'无效的SQL语句;应为“删除”、“插入”、“过程”、“选择”或“更新”


我想您可以使用
orderby
TOP
来做您想做的事情:

SELECT TOP 1 *
FROM Contas
ORDER BY IIF(Dia >= {Dia_Atual_LB}, 1, 2),  -- current/future days first
         Dia;

很抱歉之前没有提到,但我使用的是VB.NET,我尝试了从Contas ORDER BY IIF(Dia>={Dia_Atual_LB},1,2)中选择“$”TOP(1)*”,它返回我这样的信息:“SELECT语句包含拼写错误或缺少的保留字或参数名称,或者标点不正确。”“@HeitorBadotti。移除
1
周围的括号。我认为Access女士不喜欢他们。你的陈述很好,但我试图理解它,我没有理解“1,2”这是什么意思?@HeitorBadotti。这就是添加一个
orderby
键,其值为“1”表示未来日期,为“2”表示过去日期。