sqlite 提取数据如下所示的时间-“星期一|7:00-17:00'在SQL中?

ctrmrzij  于 2023-01-17  发布在  SQLite
关注(0)|答案(2)|浏览(140)

有没有办法在SQL中提取这种类型文本数据的开始时间和结束时间?'Monday|7:00-17:00'我需要计算差额,得到小时数。
我试过SUBSTR,但由于星期一、星期二等的天数不同,所以不起作用。

jyztefdp

jyztefdp1#

可以混合使用SUBSTRINSTR函数来检索小时,如下所示:

SELECT SUBSTR('Monday|7:00-17:00', INSTR('Monday|7:00-17:00','|')+1, 100);
ffdz8vbo

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,然后重试。
在上面的查询中,我将问题分解为:

  • 查找|所在的位置。如果文本是Mon|17:00-18:00,则位置为4
  • 使用substr提取|之后的文本,该文本应为17:00-18:00
  • 找到-17:00-18:00中的位置,该位置为6
  • 将上述3项的学习结果相加,得出开始时间
  • 我获取|(17:00-18:00)之后的文本,并从位置1到位置5提取
  • 那就是17点
  • 重复类似的方法以获取结束时间
  • 我通过提取位置7后的100个字符来获取17:00-18:00中-后的文本
  • 100是我选择的一个任意数。您可以通过一些数学运算来获得更复杂的长度

下面是另一个表格示例:http://sqlfiddle.com/#!5/4f347/2/0

相关问题