将 DATE 插入 H2 数据库

Insert a DATE into H2 database

我想使用 sql 脚本将日期插入到我的 H2 数据库中。现在我有以下内容:

CREATE TABLE CUSTOMERS (
  ID int NOT NULL,
  FIRSTNAME varchar(50) NOT NULL,
  LASTNAME varchar(50) NOT NULL,
  GENDER varchar(50) NOT NULL,
  COMPANYID varchar(50) NOT NULL,
  EMAIL varchar(50) NOT NULL,
  BIRTHDAY date NOT NULL,
  CREATEDAT date NOT NULL,
  UPDATEDAT date NOT NULL,
  PRIMARY KEY (ID)
);
INSERT INTO CUSTOMERS (
  ID,
  FIRSTNAME,
  LASTNAME,
  GENDER,
  COMPANYID,
  EMAIL,
  BIRTHDAY,
  CREATEDAT,
  UPDATEDAT
)
VALUES (
  1, 
  'Lee', 
  'Diaz', 
  'male', 
  '159', 
  'vel.sapien.imperdiet@protonmail.ca', 
  '05-08-1912', 
  '13-12-2019', 
  '30-09-2021'
)

出于某种原因,日期不起作用,但我不明白为什么。有人知道吗?

我们可以尝试对 DateTime 插入值使用 ISO_8601 格式。

INSERT INTO CUSTOMERS (
  ID,
  FIRSTNAME,
  LASTNAME,
  GENDER,
  COMPANYID,
  EMAIL,
  BIRTHDAY,
  CREATEDAT,
  UPDATEDAT
)
VALUES (
  1, 
  'Lee', 
  'Diaz', 
  'male', 
  '159', 
  'vel.sapien.imperdiet@protonmail.ca', 
  '1912-05-08', 
  '2019-13-12', 
  '2021-30-09'
)

date-time 值有标准的 SQL 文字:

  • DATE '2022-12-31' 用于 DATE 数据类型。
  • TIME '23:59.59TIME '23.59.59.123456' 等,对于 TIME 数据类型。
  • TIME WITH TIME ZONE '23:59:59+07:30' 用于 TIME WITH TIME ZONE 数据类型。
  • TIMESTAMP '2022-12-31 23.59.59' 对于 TIMESTAMP.
  • TIMESTAMP WITH TIME ZONE '2022-12-31 23.59.59+07:30' 对于 TIMESTAMP WITH TIME ZONE

各种数据库系统可能支持自己的扩展。在 H2 中,您可以在插入语句中指定字符串 '2022-12-31' 而不是日期文字,很多人都这样做。然而,在日期时间算术表达式中,这种替换可能不起作用,因为各种表达式对不同数据类型的工作方式不同,'2022-12-31' 是一个字符串,它不是一个日期。但它显式或隐式转换为 DATE 会产生一个日期值。

H2 支持在日期和时间之间使用 T 而不是 space 的 ISO 8601 样式日期时间文字。 (SQL 中的日期时间和间隔值通常与 ISO 8601 不同。)H2 支持时间戳中带有时区文字的时区名称,但 H2 始终将这些时区转换为简单的时区偏移量。

H2支持负数年份和大于4位数的年份

在某些兼容模式下,您可以使用其他替代语法,但通常应避免使用它们。

还有各种日期时间解析和格式化函数,但我想你在这里不需要它们。