有没有办法在SQL中提取这种类型文本数据的开始时间和结束时间?'Monday|7:00-17:00'我需要计算差额,得到小时数。我试过SUBSTR,但由于星期一、星期二等的天数不同,所以不起作用。
jyztefdp1#
可以混合使用SUBSTR和INSTR函数来检索小时,如下所示:
SUBSTR
INSTR
SELECT SUBSTR('Monday|7:00-17:00', INSTR('Monday|7:00-17:00','|')+1, 100);
ffdz8vbo2#
看看这个例子:https://dbfiddle.uk/HyMsdfoJ
select dt , instr(dt, '|') , substr(dt, instr(dt, '|') + 1, 100) , instr(substr(dt, instr(dt, '|') + 1, 100), '-') , substr( substr(dt, instr(dt, '|') + 1, 100), 1, instr(substr(dt, instr(dt, '|') + 1, 100), '-') - 1 ) as starttime , substr( substr(dt, instr(dt, '|') + 1, 100), instr(substr(dt, instr(dt, '|') + 1, 100), '-') + 1, 100 ) as endtime from (select 'Saturday|9:00-11:00' as dt) t
您可以将select 'Saturday|9:00-11:00' as dt更改为select 'Mon|17:00-18:00' as dt,然后重试。在上面的查询中,我将问题分解为:
select 'Saturday|9:00-11:00' as dt
select 'Mon|17:00-18:00' as dt
|
Mon|17:00-18:00
17:00-18:00
-
下面是另一个表格示例:http://sqlfiddle.com/#!5/4f347/2/0
2条答案
按热度按时间jyztefdp1#
可以混合使用
SUBSTR
和INSTR
函数来检索小时,如下所示:ffdz8vbo2#
看看这个例子:https://dbfiddle.uk/HyMsdfoJ
您可以将
select 'Saturday|9:00-11:00' as dt
更改为select 'Mon|17:00-18:00' as dt
,然后重试。在上面的查询中,我将问题分解为:
|
所在的位置。如果文本是Mon|17:00-18:00
,则位置为4|
之后的文本,该文本应为17:00-18:00
-
在17:00-18:00
中的位置,该位置为6|
(17:00-18:00)之后的文本,并从位置1到位置5提取-
后的文本下面是另一个表格示例:http://sqlfiddle.com/#!5/4f347/2/0