【问题标题】:If statement SQL day of month intervalif 语句 SQL 日期间隔
【发布时间】:2019-11-14 20:34:36
【问题描述】:

我需要在“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.OleDbException: '无效的 SQL 语句;预期为“DELETE”、“INSERT”、“PROCEDURE”、“SELECT”或“UPDATE”。”

【问题讨论】:

    标签: sql vb.net ms-access


    【解决方案1】:

    我认为你可以使用ORDER BYTOP 做你想做的事:

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

    【讨论】:

    • 抱歉之前没提过,但是我用的是VB.NET,我试过"$"SELECT TOP (1) * FROM Contas ORDER BY IIF(Dia >= {Dia_Atual_LB}, 1, 2 )”,它返回给我:“SELECT 语句包含一个保留字或一个拼写错误或丢失的参数名称,或者标点符号不正确。'”
    • @HeitorBadotti 。 . .删除1 周围的括号。我认为 MS Access 不喜欢它们。
    • 你的陈述完美无缺,但我试图理解它,我没有得到“, 1, 2)”的部分是什么意思?
    • @HeitorBadotti 。 . .那就是添加一个order by 键,其值为“1”代表未来日期,“2”代表过去日期。
    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2011-01-07
    • 2017-08-20
    相关资源
    最近更新 更多