当前位置: 首页 > 知识库问答 >
问题:

Oracle中的to_date查询在Windows和Ubuntu IDE中的运行方式不同

微生城
2023-03-14
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执行select查询,它会引发以下错误-“[代码:1843,SQL State:22008]ORA-01843:不是一个有效的月份”。

但是如果我从Ubuntu IntelliJ数据库IDE中执行相同的查询,它就会通过给出resultset。

如果日期格式不匹配,那么为什么它会传入Ubuntu?请建议为什么会发生这种情况,以及需要改变什么。

  • 数据库-Oracle数据库11g企业版11.2.0.1.0
  • Windows-Microsoft Windows 10 Enterprise
  • DB Visualizer-free 10.0.18
  • Ubuntu-Ubuntu 16.04.6 LTS
  • IntelliJ IDEA-2018.3.5(终极版)

共有1个答案

朱鹏
2023-03-14

insert语句依赖于基于当前会话(从当前操作系统用户派生)的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'));
 类似资料:
  • 但是,如果camp.start_date为NULL或没有行,那么它将引发异常- ORA-01858:在需要数字的地方发现了一个非数字字符 camp.start_date实际上是一个VARCHAR2,我需要将它转换为日期(是的,我知道它可能应该是一个日期字段,但我没有更改它的选项)。 其中camp.start_date不为null并且to_date(camp.start_date,'mm/dd/yy

  • 我们有一个保存多条记录(下面是DDL和DML)的通用表: 以下是记录: Oracle Database 11g Enterprise Edition版本11.2.0.4.0-生产 PL/SQL版本11.2.0.4.0-生产“Core 11.2.0.4.0生产” 12C:

  • 问题内容: 我正在将时间戳字段格式化为“ DD / MM / YYYY”格式,以获取该日期的所有已处理记录。 上面的查询返回0计数。 上面的查询返回29个计数。 如果我运行: 等等… to_date格式将年份格式化为 0015 ? 如何避免将年份格式化为0015格式?我需要2015年的格式。请帮助我解决此问题。 问题答案: 截止日期(event_dt,“ DD / MM / YYYY”) 根据您对

  • 用户实体类: 感谢任何帮助。多谢了。

  • 问题内容: 我在Oracle11g中有一个具有(id,parent_id)结构的表。 我想对其进行查询,以获取与这些ID各自分层链接的所有行,因此结果应为: 我一直在和上苦苦挣扎,现在,我所能得到的只是查询所需结果的一小部分: 我不想使用任何循环来获取完整的结果。 任何的想法 ? 最好的问候,J茅r么我Lefr猫re PS:在第一个答案之后编辑,注意到我忘记了一些我想要的结果… 问题答案: 您发布

  • 问题内容: 我对PLSQL的更高级主题还是陌生的,因此希望有人可以帮助我。 问题: 我有一个表,其中包含管理员和用户之间发送的消息。该表在同一表的message_id字段中具有带FK的message_parent:如果填充了该字段,则意味着该消息是作为对先前消息的答复而发送的。我需要选择属于同一对话的所有消息并显示它们。可以通过单个查询完成此操作,还是需要一个过程来处理这种逻辑?据我了解,它必须是