问题描述
我有一列 (varchar) 显示的值为 44:45:00。我正在编写一个查询,我想将 44:00:00 转换为十进制数并想使用以下计算
((44(part1) * 60) + 45(part2)) / 60 = 44,75
结果应作为值返回,不应创建新列。
解决方法
试试这个像这样的自定义分隔符:
val selectExpr = schemaArr.map(m => {
val mapping = m.split("#")
col(mapping(1)).as(mapping(0))
})
val updatedDF = df.select(selectExpr:_*)
,
数据库支持字符串函数。子串函数通常称为 substr()
或 substring()
(或两者)。假设格式正是您指定的格式,您可以使用:
select (cast(substr(col,1,2) as int) +
cast(substr(col,4,2) as int) / 60.0
)
许多数据库都有简化此操作的方法。但是这种方法应该适用于任何数据库。
,请使用这个:
架构:
create table x(t_hours varchar(20));
insert into x values('1:00:00');
insert into x values('1:00:00');
insert into x values('64:00:00');
insert into x values('2:00:00');
insert into x values('2:00:00');
insert into x values('1:30:00');
insert into x values('110:40:12');
insert into x values('44:38:24');
insert into x values('14:00:00');
insert into x values('8:00:00');
insert into x values('8:00:00');
insert into x values('47:00:00');
insert into x values('16:00:00');
insert into x values('1:00:00');
insert into x values('8:00:00');
insert into x values('16:00:00');
insert into x values('1:33:36');
insert into x values('19:46:48');
insert into x values('2:00:00');
insert into x values('2:00:00');
insert into x values('8:00:00');
insert into x values('8:00:00');
insert into x values('4:30:00');
insert into x values('6:30:00');
insert into x values('0:15:00');
insert into x values('1:00:00');
insert into x values('32:00:00');
insert into x values('8:00:00');
insert into x values('17:00:00');
查询:
select t_hours,left(t_hours,charindex(':',t_hours)-1)+ left(substring(t_hours,t_hours)+1,len(t_hours)-charindex(':',t_hours)),substring(t_hours,t_hours)))-1)/60.0
from x
输出:
t_hours | (无列名) |
---|---|
1:00:00 | 1.000000 |
1:00:00 | 1.000000 |
64:00:00 | 64.000000 |
2:00:00 | 2.000000 |
2:00:00 | 2.000000 |
1:30:00 | 1.500000 |
110:40:12 | 110.666666 |
44:38:24 | 44.633333 |
14:00:00 | 14.000000 |
8:00:00 | 8.000000 |
8:00:00 | 8.000000 |
47:00:00 | 47.000000 |
16:00:00 | 16.000000 |
1:00:00 | 1.000000 |
8:00:00 | 8.000000 |
16:00:00 | 16.000000 |
1:33:36 | 1.550000 |
19:46:48 | 19.766666 |
2:00:00 | 2.000000 |
2:00:00 | 2.000000 |
8:00:00 | 8.000000 |
8:00:00 | 8.000000 |
4:30:00 | 4.500000 |
6:30:00 | 6.500000 |
0:15:00 | 0.250000 |
1:00:00 | 1.000000 |
32:00:00 | 32.000000 |
8:00:00 | 8.000000 |
17:00:00 | 17.000000 |
dbfiddle here