SQL 中的时间戳字段中的秒数无效
Invalid seconds in timestamp field in SQL
我在 table 中有一个时间戳字段,其中某些地方的第二个值 SUBSTR(col,13,2) 为 60+。
我想更新时间戳字段的无效第二部分并将此类数据转换为有效的时间戳格式 DDMMYYYYHHMISS。
示例数据:
CREATE VOLATILE TABLE TEST (COL VARCHAR(50)) ON COMMIT PRESERVE ROWS;
INSERT INTO TEST (04012022000010);
INSERT INTO TEST (31012022000066);
INSERT INTO TEST (02012021000067);
COL
1 31012022000066
2 02012021000067
3 04012022000010
我认为这就是您所需要的。我们将没有秒数的字符串转换为 DATETIME 并添加秒数。
我给了 2 个版本,因为要求的 DATETIME 格式不是标准的 ISO 格式
第一个请求使用问题中要求的日期格式。我给了2个版本,因为我不知道你的本地设置是否修改了自动功能。
DDMMYYYYHHMISS
SELECT CAST(
CONCAT(
SUBSTRING(COL,1,12),'00'
) AS TIMESTAMP)
+ INTERVAL SUBSTRING(COL,11,2) second
FROM TEST;
我们将输入转换为 ISO,然后将结果格式化为请求的格式。
Input: YYYY-MM-DD HH:MI:SS
Output: DDMMYYYYHHMISS
SELECT CAST(
CONCAT(
SUBSTRING(COL,5,4),'-',
SUBSTRING(COL,1,2),'-',
SUBSTRING(COL,3,2),' ',
SUBSTRING(COL,9,2),':',
SUBSTRING(COL,11,2),':00'
) AS TIMESTAMP)
+ INTERVAL SUBSTRING(COL,11,2)
FORMAT 'DDMMYYYYHHMISS'
AS corrected_date
FROM TEST;
这就是@Kendle 在 Teradata 中的逻辑 SQL:
select
cast(substring(col from 1 for 12) as timestamp(0) format 'ddmmyyyyhhmi') +
cast(substring(col from 13 for 2) as interval second) as TS_correct,
to_char(TS_correct,'ddmmyyyyhhmiss')
from test;
我在 table 中有一个时间戳字段,其中某些地方的第二个值 SUBSTR(col,13,2) 为 60+。 我想更新时间戳字段的无效第二部分并将此类数据转换为有效的时间戳格式 DDMMYYYYHHMISS。
示例数据:
CREATE VOLATILE TABLE TEST (COL VARCHAR(50)) ON COMMIT PRESERVE ROWS;
INSERT INTO TEST (04012022000010);
INSERT INTO TEST (31012022000066);
INSERT INTO TEST (02012021000067);
COL
1 31012022000066
2 02012021000067
3 04012022000010
我认为这就是您所需要的。我们将没有秒数的字符串转换为 DATETIME 并添加秒数。 我给了 2 个版本,因为要求的 DATETIME 格式不是标准的 ISO 格式 第一个请求使用问题中要求的日期格式。我给了2个版本,因为我不知道你的本地设置是否修改了自动功能。
DDMMYYYYHHMISS
SELECT CAST(
CONCAT(
SUBSTRING(COL,1,12),'00'
) AS TIMESTAMP)
+ INTERVAL SUBSTRING(COL,11,2) second
FROM TEST;
我们将输入转换为 ISO,然后将结果格式化为请求的格式。
Input: YYYY-MM-DD HH:MI:SS
Output: DDMMYYYYHHMISS
SELECT CAST(
CONCAT(
SUBSTRING(COL,5,4),'-',
SUBSTRING(COL,1,2),'-',
SUBSTRING(COL,3,2),' ',
SUBSTRING(COL,9,2),':',
SUBSTRING(COL,11,2),':00'
) AS TIMESTAMP)
+ INTERVAL SUBSTRING(COL,11,2)
FORMAT 'DDMMYYYYHHMISS'
AS corrected_date
FROM TEST;
这就是@Kendle 在 Teradata 中的逻辑 SQL:
select
cast(substring(col from 1 for 12) as timestamp(0) format 'ddmmyyyyhhmi') +
cast(substring(col from 13 for 2) as interval second) as TS_correct,
to_char(TS_correct,'ddmmyyyyhhmiss')
from test;