在 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 不兼容。
我想将现有 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 不兼容。