【问题标题】:Automatically format sql dates自动格式化sql日期
【发布时间】:2010-08-04 16:05:35
【问题描述】:

我想要做的是自动更改我的 sql 查询中日期的输出格式,而无需指定它(PHP/Oracle)。

我正在使用to_char(pi.date_of_birth , 'YYYY/MM/DD') as date_of_birth 来更改我的查询格式。我希望能够将其应用于'*' 运算符返回的任何日期。

我的问题是我无法手动编写所有查询,其中大部分是动态生成的,并且以某种方式全局更改格式会容易得多。

现在我还有一个问题是我对数据库的控制是“零”的。所以我不能进去改变任何东西,或者添加任何程序。是否有一些语法可以附加到我的查询中,或者将其集成到 php 中的简单方法?谢谢。

【问题讨论】:

    标签: php sql oracle


    【解决方案1】:

    为什么需要在数据库层格式化输出?为什么不将其检索为 PHP 用于日期和时间的任何类型,并在那里格式化呢?同样对于输入值,您应该使用参数化查询并将值指定为日期/时间,而不是将它们以特定格式放入 SQL。

    【讨论】:

    • 我理解你的意思,但我不太明白这怎么可能。当我在 php 中运行查询时,在返回字符串类型的所有值的数据集中。即使是严格的数值也是如此。它们存储在数据库中的类型似乎并不重要,当我运行查询时,它们会以字符串形式返回。
    • @The_Denominator:不幸的是,我对 PHP 的了解还不够,无法再提供帮助 - 但我真的希望有一种方法可以从数据库中获取正确键入的数据。我很难相信 PHP 会从根本上缺乏。
    • 是的,我认为这完全有可能,如果不是,那就太奇怪了。我只是不知道怎么做。感谢您的帮助。
    • 因此,如果我正确阅读了文档,我正在使用的 oci8 驱动程序似乎有这个特定的缺陷。 php.net/manual/en/oci8.datatypes.php
    • @The_Denominator:Blech。你有我的同情。我会把这个答案留给任何遇到同样事情但有更好驱动程序的人 - 但我认为我不能真正帮助你:(
    【解决方案2】:

    如果您确实需要更改格式,请修改您的连接脚本以添加一个更改会话,该会话将更改 NLS_DATE_FORMAT

    $db = new PDO("oci:dbname=" . $dbSource, $dbUser, $dbPass);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD'";
    $db->exec($sql);
    

    【讨论】:

    • 谢谢,我现在用的是oci8抽象层,好像没找到对应的功能,请问你知道是什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多