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))