【问题标题】:Simple Oracle SQL date syntax question简单的 Oracle SQL 日期语法问题
【发布时间】:2010-09-22 22:07:15
【问题描述】:

我正在尝试将有效的 MS Access 查询转换为在通过 VB 脚本 (.asp) 访问的 Oracle 数据库上运行。这是 WHERE 子句的最后一部分:

sql = sql & "WHERE (UAT.HB.MB_MODE = 'A' AND   UAT.HB.PRINT_DATE >= '" 
& SD & "' AND UAT.HB.PRINT_DATE <= '" & ED  &"'  )"

变量“SD”(即“开始日期”)是一个文本字符串,可以包含诸如“11/11/2008”之类的值。变量“ED”(即“结束日期”)也是如此。

但是,日期不起作用。 Oracle 是否需要一种特殊的方式来使用日期?

必须转换日期吗?我是否像在 MS Access 中那样用“#”关键字包围它们?

【问题讨论】:

    标签: sql oracle ms-access vbscript date


    【解决方案1】:

    在 Oracle 中,您的日期应该写成这样的 ANSI 日期文字:

    DATE '2008-11-11'
    

    或者从这样的字符串转换为日期:

    TO_DATE('11/11/2008', 'MM/DD/YYYY')
    

    here

    【讨论】:

    • 在这样的日期执行
    【解决方案2】:

    不要假设默认的 Oracle 日期格式是什么。检查NLS_DATE_FORMAT 或使用TO_DATE 进行转换。像这样:

    TO_DATE('2008-11-18 14:13:59', 'YYYY-MM-DD HH24:Mi:SS')
    

    注意分钟的'Mi'而不是'MM'。这吸引了很多人。

    【讨论】:

    • 我假设你的意思是 MI 分钟而不是 MM(这将是一个月)。
    【解决方案3】:

    根据this,您可以使用以下内容:

    to_date('19960725','YYYYMMDD')
    

    【讨论】:

      【解决方案4】:

      Oracle 的默认日期格式是“dd-mon-yy”。您可以对日期字段执行 TO_CHAR 函数,将其转换为您喜欢匹配的格式。

      【讨论】:

      • NLS_DATE_FORMAT,它控制隐式字符串到日期和日期到字符串转换的默认格式取决于客户端区域设置。当您拥有欧洲客户端 PC 时,默认格式会更改。由于客户端首选项会覆盖数据库设置,因此代码可能会开始失败。
      • 不过,永远不要依赖默认值。
      • ...但是,知道“默认默认值”很有用。
      【解决方案5】:

      以下是转换日期和从日期转换的几个示例:

      • select to_date('2008/11/18:12:00:00AM', 'yyyy/mm/dd:hh:mi:ssam') from dual
      • select to_char(sysdate, 'mm/dd/yyyy') from dual

      【讨论】:

        【解决方案6】:

        默认的 Oracle 日期格式可以从一个数据库更改为下一个数据库。因此,如果您不知道数据库使用的日期格式,那么您应该使用带有明确日期格式字符串的 TO_DATE 函数。鉴于默认日期格式可能随时更改,因此最好使用明确的日期格式字符串。

        例如: TO_DATE('11/11/2008 17:30','MM/DD/YYYY HH24:MI')

        【讨论】:

          【解决方案7】:

          不要忘记日期包含时间(默认为 00:00:00),所以
          不要被这样的事情抓住:
          给定三个日期start_date, print_date, end_date,都在同一
          print_date &gt;= start_date AND print_date &lt;= end_date 失败,因为print_date 大于end_date :强>
          start_date 是 2008-11-19 (00:00:00)
          end_date 是 2008-11-19 (00:00:00)
          print_date 是 2008-11-19 (16:00:00)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-01-12
            • 1970-01-01
            • 1970-01-01
            • 2023-03-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多