gpt4 book ai didi

sql - 在 Oracle 中使用 to_date 的查询在 Windows 和 Ubuntu IDE 中运行不同

转载 作者:行者123 更新时间:2023-12-01 21:22:56 27 4
gpt4 key购买 nike

我有以下 Oracle 查询

SELECT COMPANY_NO FROM COMPANY where to_date('2020-07-20', 'yyyy-mm-dd') BETWEEN START_DATE and END_DATE;

使用以下查询创建表并插入数据

CREATE TABLE COMPANY (COMPANY_NO varchar2(20), START_DATE varchar2(20), END_DATE varchar2(20));
INSERT INTO COMPANY (COMPANY_NO,START_DATE,END_DATE) VALUES ('Test','01.07.2020','31.07.2020');

如果我在 Windows 中从 DB Visualizer 执行选择查询,它会抛出以下错误 - “[代码:1843,SQL 状态:22008] ORA-01843:不是有效月份”。

但是如果我从 Ubuntu IntelliJ 数据库 IDE 执行相同的查询,它会传递给结果集。

如果日期格式不匹配,那么为什么它在 Ubuntu 中传递?请提出为什么会发生这种情况以及需要更改的内容。

  • 数据库 - Oracle Database 11g 企业版 11.2.0.1.0 版
  • Windows - Microsoft Windows 10 企业版
  • DB 可视化工具 - 免费 10.0.18
  • Ubuntu - Ubuntu 16.04.6 LTS
  • IntelliJ IDEA - 2018.3.5(终极版)

最佳答案

您的插入语句依赖于基于当前 session (从当前操作系统用户派生)的 NLS 设置的隐式数据类型转换

您永远不应该使用纯字符串来提供日期值。要么使用(明确的)ANSI 文字(我更喜欢):

INSERT INTO COMPANY (COMPANY_NO,START_DATE,END_DATE) 
VALUES ('Test', date '2020-07-01', date '2020-07-31');

或使用具有明确格式的to_date:

INSERT INTO COMPANY (COMPANY_NO,START_DATE,END_DATE) 
VALUES ('Test',to_date('01.07.2020', 'dd.mm.yyyy'), to_date('31.07.2020', 'dd.mm.yyyy'));

我还强烈建议永远不要使用使用名称(例如 'dd.mon.yyyy')而不是数字的格式掩码来使用 to_date() - 因为这些名称再次受制于当前 session 的 NLS 设置。

关于sql - 在 Oracle 中使用 to_date 的查询在 Windows 和 Ubuntu IDE 中运行不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63614416/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com