You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle数据库按dd/mm/yy格式查询日期字段报错如何解决

Oracle按dd/mm/yy格式实现日期条件查询方案

三个报错写法的核心问题有两点:

  • Oracle中字符串字面量必须使用单引号包裹,双引号仅用于标记表名、列名这类标识符,用双引号包裹日期字符串会被数据库识别为对象名,直接触发无效标识符报错
  • 调用to_date()函数时必须显式指定日期格式掩码,不能仅传入日期字符串,否则会依赖数据库默认的NLS_DATE_FORMAT配置,极易出现解析错误;ANSI标准的DATE关键字仅支持YYYY-MM-DD格式的日期字面量,不支持dd/mm/yy格式的输入。

测试表结构

----------------------
| MyTable            |
----------------------
| id INT             |
| name VARCHAR(255)  |
| date_creation DATE |
----------------------

表内示例数据

---------------------------------
| id | name     | date_creation |
---------------------------------
| 1  | SomeText | 03/11/16      |
| 2  | Sample   | 04/11/16      |
| 3  | Sample1  | 13/07/22      |
| 4  | Sample2  | 11/07/22      |
---------------------------------

原错误写法问题说明

  1. 第一种写法:用双引号包裹字符串,且to_date未指定格式
SELECT 
    id, name, date_creation
FROM
    MyTable            
WHERE 
    date_creation > to_date("01/07/22")

报错信息:ORA-00904: "01/07/22" : invalid identifier

  1. 第二种写法:DATE关键字后接的日期不符合ANSI固定的YYYY-MM-DD格式,语法解析失败
SELECT 
    id, name, date_creation
FROM
    MyTable            
WHERE 
    date_creation > DATE "01/07/22"

报错信息:ORA-00936: missing expression

  1. 第三种写法:直接用双引号包裹字符串和日期字段比较,字符串被识别为标识符
SELECT 
    id, name, date_creation
FROM
    MyTable            
WHERE 
    date_creation > "01/07/22"

报错信息:ORA-00904: "01/07/22" : invalid identifier

正确查询写法

要匹配dd/mm/yy格式的日期串,用to_date()显式指定格式掩码即可,写法如下:

SELECT 
    id, name, date_creation
FROM
    MyTable            
WHERE 
    date_creation > to_date('01/07/22', 'dd/mm/yy')

执行后会返回所有创建日期在2022年7月1日之后的行,即id为3、4的两条记录。

注意:如果日期串是4位年份(比如01/07/2022),只需要把格式掩码改成'dd/mm/yyyy'即可,不需要调整其他逻辑。

如果要使用ANSI日期字面量写法,必须把日期转成YYYY-MM-DD格式,示例如下:

SELECT 
    id, name, date_creation
FROM
    MyTable            
WHERE 
    date_creation > DATE '2022-07-01'

内容的提问来源于stack exchange,提问作者executable

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:27:10