发布
社区首页 >问答首页 >ORA-01830:日期格式图片在转换整个输入字符串之前结束,尽管使用了TO_TIMESTAMP

ORA-01830:日期格式图片在转换整个输入字符串之前结束,尽管使用了TO_TIMESTAMP
EN

Stack Overflow用户
提问于 2018-06-01 06:30:18
回答 1查看 1.1K关注 0票数 2

尽管使用了TO_TIMESTAMP函数,但我的查询(当由应用程序触发时)无法执行,并出现此错误。

代码语言:javascript
代码运行次数:0
复制
INSERT INTO MY_TABLE_NAME (
  UPDATED_DATE,
  CREATED_DATE,
  TEST_SUBJECT,
  THIRD_DATE
) VALUES (
  TO_TIMESTAMP('2018-05-31 14:45:32.000', 'YYYY-MM-DD HH24:MI:SSxFF'),
  TO_TIMESTAMP('2018-05-31 14:45:32.000', 'YYYY-MM-DD HH24:MI:SSxFF'),
  'test',
  TO_TIMESTAMP('2018-06-09 14:45:00.000', 'YYYY-MM-DD HH24:MI:SSxFF')
)

以下是错误消息-

代码语言:javascript
代码运行次数:0
复制
{FAILED after 2 ms}
java.sql.SQLDataException: ORA-01830: date format picture ends before converting entire input string

此错误仅在一个环境中抛出,但在其他环境中运行良好。

手动执行查询也很好。

所有环境中的会话时间戳格式都是相同的(登录时由触发器更新)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-01 06:43:09

TL;DR使用时间戳文字来避免整个问题:

代码语言:javascript
代码运行次数:0
复制
INSERT INTO MY_TABLE_NAME (
  UPDATED_DATE,
  CREATED_DATE,
  TEST_SUBJECT,
  THIRD_DATE
) VALUES (
  TIMESTAMP '2018-05-31 14:45:32.000',
  TIMESTAMP '2018-05-31 14:45:32.000',
  'test',
  TIMESTAMP '2018-06-09 14:45:00.000'
);

如果不能,请检查NLS_NUMERIC_CHARACTERS数据库/会话参数。如果小数点不是.,那么x格式模型将不匹配.,但将匹配数据库/会话使用的任何字符,并且字符串将不匹配。

SQL Fiddle

Oracle 11g R2架构设置

代码语言:javascript
代码运行次数:0
复制
CREATE TABLE MY_TABLE_NAME (
  UPDATED_DATE TIMESTAMP,
  CREATED_DATE TIMESTAMP,
  TEST_SUBJECT VARCHAR2(20),
  THIRD_DATE   TIMESTAMP
);

查询1

代码语言:javascript
代码运行次数:0
复制
-- Set decimal separator to "." and thousands separator to ","
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,'    

INSERT INTO MY_TABLE_NAME (
  UPDATED_DATE,
  CREATED_DATE,
  TEST_SUBJECT,
  THIRD_DATE
) VALUES (
  TO_TIMESTAMP('2018-05-31 14:45:32.000', 'YYYY-MM-DD HH24:MI:SSxFF'),
  TO_TIMESTAMP('2018-05-31 14:45:32.000', 'YYYY-MM-DD HH24:MI:SSxFF'),
  'test',
  TO_TIMESTAMP('2018-06-09 14:45:00.000', 'YYYY-MM-DD HH24:MI:SSxFF')
)

SELECT * FROM MY_TABLE_NAME

代码语言:javascript
代码运行次数:0
复制
|          UPDATED_DATE |          CREATED_DATE | TEST_SUBJECT |            THIRD_DATE |
|-----------------------|-----------------------|--------------|-----------------------|
| 2018-05-31 14:45:32.0 | 2018-05-31 14:45:32.0 |         test | 2018-06-09 14:45:00.0 |

查询2

代码语言:javascript
代码运行次数:0
复制
-- Set decimal separator to "," and thousands separator to " "
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ', '

INSERT INTO MY_TABLE_NAME (
  UPDATED_DATE,
  CREATED_DATE,
  TEST_SUBJECT,
  THIRD_DATE
) VALUES (
  TO_TIMESTAMP('2018-05-31 14:45:32.000', 'YYYY-MM-DD HH24:MI:SSxFF'),
  TO_TIMESTAMP('2018-05-31 14:45:32.000', 'YYYY-MM-DD HH24:MI:SSxFF'),
  'test',
  TO_TIMESTAMP('2018-06-09 14:45:00.000', 'YYYY-MM-DD HH24:MI:SSxFF')
)

代码语言:javascript
代码运行次数:0
复制
ORA-01830: date format picture ends before converting entire input string 

另一种解决方案是使用'YYYY-MM-DD HH24:MI:SS.FF'作为格式模型,而不是依赖x格式模型在实例/会话之间始终保持一致。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50633681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档