Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从文本解析时间间隔_Mysql_Sql - Fatal编程技术网

Mysql 从文本解析时间间隔

Mysql 从文本解析时间间隔,mysql,sql,Mysql,Sql,我有以下数据: +-------------+----------------------------+ | name | time_lost | +-------------+----------------------------+ | Break000002 | 7 day 18.0 hours | | Break000003 | 0 day 10.0 hours | | Break000004 | 1

我有以下数据:

+-------------+----------------------------+
| name        | time_lost                  |
+-------------+----------------------------+
| Break000002 | 7 day 18.0 hours           |
| Break000003 | 0 day 10.0 hours           |
| Break000004 | 1 day 1.52 hours           |
| Break000005 | 2 day 21.0 hours           |
| Break000006 | 1 day 0.416666666667 hours |
| Break000007 | 0 day 1.25 hours           |
| Break000008 | 0 day 2.5 hours            |
| Break000009 | 1 day 0.02 hours           |
+-------------+----------------------------+
SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
我想计算此表中损失的总时间,因此我尝试了以下方法:

select sum(time_lost) from mytable;
SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
输出:

+----------------+
| sum(time_lost) |
+----------------+
|             12 |
+----------------+
SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
我的问题:

SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
我如何解析这个字符串以将其转换为时间,请给我任何提示

SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   

谢谢

最简单的解决方案是首先将数据存储为时间单位。可能是分钟数,也可能是秒数,这取决于你需要测量的准确度

SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   

例如,如果您有分钟数,那么字段的“和”将给出所有行中的总分钟数,您可以通过执行适当的乘法或除法将其转换为小时/天/任何显示的时间-您可以在此处执行此操作,或者,在应用程序的表示层中可能更合适,最简单的解决方案是首先将数据存储为时间单位。可能是分钟数,也可能是秒数,这取决于你需要测量的准确度

SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   

例如,如果您有分钟数,那么字段的“和”将给出所有行中的总分钟数,您可以通过执行适当的乘法或除法将其转换为小时/天/任何显示的时间-您可以在此处执行此操作,或者,在应用程序的表示层中,它可能更合适。您可以使用以下分数将
time\u lost
列转换为天数:

LEFT(time_lost, LOCATE(' day', time_lost)-1) + SUBSTR(time_lost, LOCATE(' day', time_lost)+5)/24
SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
然后将其放入
SUM()
函数中

select sum(LEFT(time_lost, LOCATE(' day', time_lost)-1) + SUBSTR(time_lost, LOCATE(' day', time_lost)+5)/24) AS total_time_lost
from mytable;
SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   

示例数据的结果为
14.2638天

您可以将
时间损失
列转换为天数,分数如下:

LEFT(time_lost, LOCATE(' day', time_lost)-1) + SUBSTR(time_lost, LOCATE(' day', time_lost)+5)/24
SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
然后将其放入
SUM()
函数中

select sum(LEFT(time_lost, LOCATE(' day', time_lost)-1) + SUBSTR(time_lost, LOCATE(' day', time_lost)+5)/24) AS total_time_lost
from mytable;
SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   

示例数据的结果将是
14.2638天

首先使用替换功能2次以删除“天”和“小时”,然后修剪以删除前导空格和尾随空格

SELECT TRIM(REPLACE(REPLACE(time_lost, 'day ', ''), 'hours', ''))
SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
因此,你将以这个结束

| Break000002 | 7 18.0           |
| Break000003 | 0 10.0           |
| Break000004 | 1 1.52           |
| Break000005 | 2 21.0           |
| Break000006 | 1 0.416666666667 |
| Break000007 | 0 1.25           |
| Break000008 | 0 2.5            |
| Break000009 | 1 0.02           |
SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
然后使用子字符串_INDEX隔离天数(在找到第一个空格之前字符串的左部分)

SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
这给了你这个

| Break000002 | 7|
| Break000003 | 0|                    
| Break000004 | 1|                    
| Break000005 | 2|                    
| Break000006 | 1|                    
| Break000007 | 0|                    
| Break000008 | 0|                    
| Break000009 | 1                    
SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
使用子字符串_INDEX和负计数(-1),您可以隔离小时数(从末尾找到的第一个空格之前字符串的右部分)

SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
这给了你这个

SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
您还应该将结果转换为数字,因为它们实际上被视为字符串

SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
现在你已经准备好进行计算了

SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
一天,只需求和。 在一个小时内,你必须把它们当作一小部分:天=小时/ 24</P>
SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
SELECT ( 
         SUM(CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED))                                                             
       + SUM(CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2)) / 24 )
       ) AS total_days  


编辑:有点太晚了

首先使用“替换”功能两次以删除“天”和“小时”,然后修剪以删除前导和尾随空格

SELECT TRIM(REPLACE(REPLACE(time_lost, 'day ', ''), 'hours', ''))
SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
因此,你将以这个结束

| Break000002 | 7 18.0           |
| Break000003 | 0 10.0           |
| Break000004 | 1 1.52           |
| Break000005 | 2 21.0           |
| Break000006 | 1 0.416666666667 |
| Break000007 | 0 1.25           |
| Break000008 | 0 2.5            |
| Break000009 | 1 0.02           |
SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
然后使用子字符串_INDEX隔离天数(在找到第一个空格之前字符串的左部分)

SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
这给了你这个

| Break000002 | 7|
| Break000003 | 0|                    
| Break000004 | 1|                    
| Break000005 | 2|                    
| Break000006 | 1|                    
| Break000007 | 0|                    
| Break000008 | 0|                    
| Break000009 | 1                    
SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
使用子字符串_INDEX和负计数(-1),您可以隔离小时数(从末尾找到的第一个空格之前字符串的右部分)

SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
这给了你这个

SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
您还应该将结果转换为数字,因为它们实际上被视为字符串

SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
现在你已经准备好进行计算了

SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
一天,只需求和。 在一个小时内,你必须把它们当作一小部分:天=小时/ 24</P>
SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))                                   
SELECT ( 
         SUM(CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED))                                                             
       + SUM(CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2)) / 24 )
       ) AS total_days  


编辑:有点太晚了

首先为time_lost列使用适当的数据类型。没有内置的解析方法,您需要使用
LOCATE()自己编写
SUBSTR()
。首先为time\u lost列使用适当的数据类型。没有内置的解析方法,您需要使用
LOCATE()
SUBSTR()
自己编写。谢谢您的回答。但我不能那样做。我有大量数据,只需要处理给定的字符串类型数据。好的。真可惜。也许一旦你有了一个解决方案,你应该考虑用查询结果替换这个列,以备将来使用。你能再详细一点吗?您希望总和的时间单位是多少?e、 天、小时、分钟?天数是否可以超过9天(即10天将是一个额外字符)。小时的准确度是多少(数字不都是相同的长度-前四个是否足够,例如18.0或0.41)?感谢您的关注,这里的天数可以高达2位数,即0-99,我正在尝试以分钟为单位获取总时间,然后以hh:mm格式显示感谢您的回答。但我不能那样做。我有大量数据,只需要处理给定的字符串类型数据。好的。真可惜。也许一旦你有了一个解决方案,你应该考虑用查询结果替换这个列,以备将来使用。你能再详细一点吗?您希望总和的时间单位是多少?e、 天、小时、分钟?天数是否可以超过9天(即10天将是一个额外字符)。小时的准确度是多少(数字不都是相同的长度-前四个是否足够,例如18.0或0.41)?感谢您的关注,这里的天数可以高达2位数,即0-99,我正在尝试以分钟为单位获取总时间,然后以hh:mm格式显示
SELECT TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1))                    
| Break000002 | 18.0           |                    
| Break000003 | 10.0           |                    
| Break000004 | 1.52           |                    
| Break000005 | 21.0           |                    
| Break000006 | 0.416666666667 |                    
| Break000007 | 1.25           |                    
| Break000008 | 2.5            |                    
| Break000009 | 0.02           |                    
-- Days as unsigned integer                    
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',1)) AS UNSIGNED)                    

-- Hours with 2 digit precision                                                       
SELECT CAST(TRIM(SUBSTRING_INDEX(TRIM(REPLACE(REPLACE(time_lost, 'day', ''), 'hours', '')), ' ',-1)) AS DECIMAL (2,2))