在 H2 数据库中将列数据 varchar 转换为时间戳

convert column data varchar to timestamp in H2 Database

我想将现有 table 中的 varchar 数据转换为时间戳。并且还更改 table.

的数据类型
DB: H2
platform: Windows

很遗憾,您的时间戳不是 SQL 或 ISO 格式,因此您不能简单地更改列的数据类型。您的情况无法自动转换。

在 1.4.200 及更早版本中,您需要执行两个步骤:

CREATE TABLE TEST(V VARCHAR);
INSERT INTO TEST VALUES ('7-18-2020 7:51');

UPDATE TEST SET V = PARSEDATETIME(V, 'M-d-yyyy HH:mm');
ALTER TABLE TEST ALTER COLUMN V SET DATA TYPE TIMESTAMP;

PARSEDATETIME returns 一个 TIMESTAMP 值,但这里它被分配回 VARCHAR 列,此操作导致使用 SQL 格式的隐式转换('2020-07-18 07:51:00') 可以在随后更改列的数据类型期间自动转换回 TIMESTAMP

如果您可以在 GitHub 上从当前资源构建 H2,则有一个更简单的一步解决方案:

CREATE TABLE TEST(V VARCHAR);
INSERT INTO TEST VALUES ('7-18-2020 7:51');

ALTER TABLE TEST ALTER COLUMN V SET DATA TYPE TIMESTAMP USING PARSEDATETIME(V, 'M-d-yyyy HH:mm');

注意:当前的 H2 在许多方面与 1.4.200 不兼容。