【问题标题】:Getting not valid month in Oracle sql在 Oracle sql 中获取无效月份
【发布时间】:2021-11-07 21:58:49
【问题描述】:

我有一个名为Transactions 的表,其中有一列名为trans_date。我只是想在 SQL*Plus 命令窗口中做一个简单的查询

查询是

SELECT * FROM transactions WHERE 
trans_date BETWEEN to_date('09/11/2021','mm/dd/yyyy') AND to_date('09/12/2021','mm/dd/yyyy');

当我运行此查询时,我得到无效月份,trans_date 下有一点 *。我读过的大部分内容都表明该查询是正确的,但我不确定问题是什么。数据类型为varchar2(20)。

【问题讨论】:

  • 是的,这是一个错字,它是 yyyy
  • 可能trans_date列的数据类型不对?从您提供的信息中无法判断。
  • 数据类型为 varchar2(20)
  • 为什么是 varchar2 而不是 date?这将使一切变得更加困难,并使各种错误成为可能。

标签: sql oracle select sqlplus to-date


【解决方案1】:

由于trans_datevarchar,并且您尝试查询它是否在两个dates 之间,因此您也需要将其转换为date。假设它与查询中的文字具有相同的格式:

SELECT * 
FROM   transactions 
WHERE  to_date(trans_date, 'mm/dd/yyy') BETWEEN 
       to_date('09/11/2021','mm/dd/yyyy') AND to_date('09/12/2021','mm/dd/yyyy');

【讨论】:

    【解决方案2】:

    似乎问题是列数据类型,尝试将其转换为日期,

    SELECT * FROM transactions 
    WHERE to_date(trans_date,'mm/dd/yyyy') BETWEEN to_date('09/11/2021','mm/dd/yyyy') AND to_date('09/12/2021','mm/dd/yyyy');
    
    

    【讨论】:

      【解决方案3】:

      您需要将trans_date 转换为日期。但是,您可以使用日期常量进行比较:

      SELECT *
      FROM transactions
      WHERE to_date(trans_date, 'mm/dd/yyyy') BETWEEN DATE '2021-09-11' AND DATE '2021-09-12';
      

      您应该使用 Oracle 的内置数据类型修复您的数据模型,以便正确存储日期。

      【讨论】:

        猜你喜欢
        • 2016-12-26
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        • 2012-05-15
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        相关资源
        最近更新 更多