按分隔符 SQL 拆分值

问题描述

我有一列 (varchar) 显示的值为 44:45:00。我正在编写一个查询,我想将 44:00:00 转换为十进制数并想使用以下计算

((44(part1) * 60) + 45(part2)) / 60 = 44,75

结果应作为值返回,不应创建新列。

sql database

解决方法

试试这个像这样的自定义分隔符:

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