【问题标题】:Problematic DateTime Comparison SQL Query Not Working有问题的日期时间比较 SQL 查询不起作用
【发布时间】:2014-05-22 16:12:38
【问题描述】:

我在执行 ODBC 查询时遇到问题。我正在尝试实现一些简单的事情。

SELECT t.* FROM table t WHERE DateTime > '#2014-05-05 00:00:00#'

我尝试在日期时间周围使用或不使用哈希 (#) 和引号执行,但没有成功。此外,我尝试使用 BETWEEN,而不是使用 >、

另外测试了“dd/mm/yyyy”、“mm/dd/yyyy”、“dd.mm.yyyy”等几种格式加上标准sql格式(iso),结果是一样的。

方法如下:

$sql = "SELECT t.* FROM table t WHERE DateTime > '#...#'";
$result = odbc_fetch_array(odbc_exec($odbc_connection, $sql));

执行此操作后,我收到一些 5-10 符号二进制错误,但没有错误消息(带有 odb_error 和 odbc_errormsg),除了:

此结果索引中没有可用的元组

(主题:PHP 中的 ODBC 错误:“No tuples available at this result index”没有帮助)

可能是一些 ODBC 问题(旧版本等)还是我们应该通过 odbc_exec 施展另一个黑魔法?

【问题讨论】:

    标签: php sql date datetime odbc


    【解决方案1】:

    也许 ODBC 在保留字日期时间方面存在问题。 我不知道如何在 PHP 中转义引号,试试

    SELECT t.* FROM table t WHERE t."DateTime" > '20140505'";
    

    【讨论】:

    • 如果我指定这样的位置,我会收到所有结果。
    • @LachezarTodorov 现在哪里出了问题?你跳过 ODBC 错误吗?
    • 看来问题出在 odbc 驱动程序中。它不接受应在 where 子句中起作用的任何内容。我只是改变了读取数据的方式并停止使用 were 子句。这不是最好的方法,但这是我现在唯一的选择。
    【解决方案2】:

    您应该对日期时间使用 ODBC 语法,即{ ts '1998-05-02 01:23:56.123' }。您可以省略部分秒。见here

    【讨论】:

      【解决方案3】:

      您是否尝试过使用 TO_DATE() 函数?您可以指定您使用的格式。

      SELECT t.* FROM table t WHERE DateTime > TO_DATE('2014-05-05 00:00:00','YYYY-MM-DD HH24:MI:SS')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-16
        • 1970-01-01
        • 2020-12-26
        相关资源
        最近更新 更多