我想将varchar数据转换为现有表中的时间戳。并更改表的数据类型。
DB:H2 平台:Windows
答案 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不兼容。