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

时间:2020-07-20 12:34:05

标签: h2

我想将varchar数据转换为现有表中的时间戳。并更改表的数据类型。

DB:H2 平台:Windows

1 个答案:

答案 0 :(得分:1)

不幸的是,您的时间戳记不是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返回一个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不兼容。