我的数据看起来像这样
Day Month Time
11 02 12:11:11
12 02 10:10:20
13 02 9:12:6
14 02 6:7:2
你可以看到时间列中的数据不是时间戳而是字符串,因此一些数据的格式错误如下:9:12:6而不是09:12:06。 我现在要做的是一个新的Colum,它结合了Day,Month和正确的时间格式字符串,":"需要删除。 结果应如下所示:
new Colum
1102121111
1202101020
1302091206
1402060702
你能帮帮我吗?
感谢
CREATE TABLE Saletime (
day VARCHAR(02) NOT NULL,
month VARCHAR(02) NOT NULL,
time VARCHAR(10) NOT NULL);
INSERT INTO saletime(day, month, time) VALUES ('11','02','12:11:11');
INSERT INTO saletime(day, month, time) VALUES ('12','02','10:10:20');
INSERT INTO saletime(day, month, time) VALUES ('13','02','9:12:6');
INSERT INTO saletime(day, month, time) VALUES ('14','02','6:7:2');
答案 0 :(得分:2)
连接值然后解析它们
select to_char(
to_timestamp(
day||'-'||month||' '||time,
'DD-MM HH24:MI:SS'),
'DDMMHHMISS')
from Saletime;
答案 1 :(得分:0)
由于输入和输出都是字符串,因此直接字符串操作也许是有意义的。 (如果输出是date
数据类型,那将会多更好,但这掌握在你的手中,而不是我的手中。)
我跟随您的主角,使用天和月作为列名。这是一种非常糟糕的做法;我希望你的实际列名不同。
目前尚不清楚您是否需要相同的左侧填充,0和日期和月份;为了以防万一,我也处理了它(它以同样的方式完成)。
select day, month, time,
lpad(day, 2, '0') || lpad(month, 2, '0')
|| lpad(regexp_substr(time, '\d+', 1, 1), 2, '0')
|| lpad(regexp_substr(time, '\d+', 1, 2), 2, '0')
|| lpad(regexp_substr(time, '\d+', 1, 3), 2, '0') as new_string
from saletime;
DATE MONTH TIME NEW_STRING
---- ----- --------- ----------
11 02 12:11:11 1102121111
12 02 10:10:20 1202101020
13 02 9:12:6 1302091206
14 02 6:7:2 1402060702
答案 2 :(得分:-1)
您可以将其作为数值计算:
select (day * 100000000 +
month * 1000000 +
cast(regexp_substr(time, '[0-9]+', 1, 1) as number) * 10000 +
cast(regexp_substr(time, '[0-9]+', 1, 2) as number) * 100 +
cast(regexp_substr(time, '[0-9]+', 1, 3) as number) * 1
)
from saletime;
Here是一个SQL小提琴。
如果您希望将其作为字符串,只需将其转换为字符串。