在 Oracle sql 中获取无效月份

Getting not valid month in Oracle sql

我有一个名为 Transactions 的 table,它有一个名为 trans_date 的列。我只是想在 SQL*Plus 命令 window

中做一个简单的查询

查询是

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).

由于 trans_date 是一个 varchar,而您要查询它是否介于两个 date 之间,您也需要将其转换为 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');

似乎问题出在列数据类型上,请尝试将其转换为日期,

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');

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

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

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