【问题标题】:HSQLDB: "invalid datetime format" for dd/mm/yyyy but not for yyyy-mm-ddHSQLDB:dd/mm/yyyy 的“无效日期时间格式”,但 yyyy-mm-dd 不是
【发布时间】:2017-02-10 13:04:28
【问题描述】:

我的表创建如下:

CREATE TABLE inventory (
  id INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 100, INCREMENT BY 1) PRIMARY KEY,
  name VARCHAR(30),
  department  VARCHAR(50),
  inventory_type VARCHAR(255),
  expiry_date date NOT NULL
);

下面是插入到表中的语句:

INSERT INTO inventory (name, department,inventory_type,expiry_date) VALUES ('om', 'Education','Raw', '01/01/2016');
INSERT INTO inventory (name, department,inventory_type,expiry_date) VALUES ('hari', 'HR','Solid' ,'02/02/2016');
INSERT INTO inventory (name, department,inventory_type,expiry_date) VALUES ('hariom', 'Finance','Other', '03/03/2016');

不幸的是,我明白了

原因:java.sql.SQLDataException:数据异常:无效日期时间 org.hsqldb.jdbc.JDBCUtil.sqlException 的格式(未知来源) ~[hsqldb-2.3.2.jar:2.3.2] 在 org.hsqldb.jdbc.JDBCUtil.sqlException(未知来源) ~[hsqldb-2.3.2.jar:2.3.2] 在 org.hsqldb.jdbc.JDBCStatement.fetchResult(未知来源) ~[hsqldb-2.3.2.jar:2.3.2] 在 org.hsqldb.jdbc.JDBCStatement.execute(未知来源) ~[hsqldb-2.3.2.jar:2.3.2] 在 org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:457) ~[spring-jdbc-4.1.6.RELEASE.jar:4.1.6.RELEASE] ... 60个常用框架 省略

谁能告诉我怎么了?

当我更改如下语句时,它工作正常:

INSERT INTO inventory (name, department, inventory_type, expiry_date) VALUES ('om', 'Education','Raw', '2016-01-01');
INSERT INTO inventory (name, department, inventory_type, expiry_date) VALUES ('hari', 'HR','Solid' ,'2016-02-02');
INSERT INTO inventory (name, department,inventory_type,expiry_date) VALUES ('hariom', 'Finance','Other', '2016-03-03');

【问题讨论】:

  • 您的问题是什么?使用 ISO 8601 标准日期格式,一切正常。
  • '01/01/2016' '2016-01-01' 是字符串,而不是 date 值。由于邪恶的隐式数据类型转换,'2016-01-01' 恰好可以转换为日期。请参阅手册了解如何正确指定数据值:hsqldb.org/doc/2.0/guide/…

标签: sql jdbc hsqldb


【解决方案1】:

谁能告诉我怎么了?

答案很简单,如果日期的字符串文字遵循'yyyy-mm-dd' 格式,HSQLDB 将只接受它们。它愿意在一定程度上有所帮助,因为它允许我们从“正确的”HSQLDB 日期文字值中省略 DATE 关键字

DATE '2016-01-02'

让我们简单地提供

'2016-01-02'

但它不会接受'01/02/2016'(无论如何都是模棱两可的)或any of the many other ways that we silly humans can represent dates

【讨论】:

  • 01/01/2016 并不模棱两可,因为无论哪种方式,日期和月份都是偶然的。 01/02/2016...不是那是模棱两可的;)
  • @JoelCoehoorn - “傻”我。 :) 感谢您的更正。
  • 如果要从非标准格式转换,请使用TO_DATE( '01/01/2016', 'DD/MM/YYYY'))
猜你喜欢
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2015-10-08
  • 2020-11-10
相关资源
最近更新 更多