我正在解析存储在Sql表中的电视节目数据,并且该数据有两列,一列用于整个节目标题(例如系列名称),然后一列用于节目的副标题(例如个别剧集)标题)。但是,程序字幕通常也包含其中的系列名称,无论是在字符串的开头还是在结尾处,或者两者都是,以下列格式:
e.g。所以使用“Horizon”标题和“1000万英镑挑战”的正确副标题,以下是字幕字段中值的可能组合:
而不是冒号后跟空格,分隔符也可以是空格连字符空格,如下所示:“地平线 - 1000万英镑的挑战 - 地平线”
基本上,我想要做的是表格中的每一行,如果字幕包含字幕开头的标题栏中的值(后跟':'或' - '),或者该值是在列的末尾(前面加上':'或' - ')或两者,然后更新该子标题以删除该前缀或后缀。任何人都可以帮助或指出我正确的方向吗?我不确定从哪里开始。
答案 0 :(得分:0)
为什么要在字幕栏中输入标题名称?
我认为你应该只提取实际名称,然后用它做你想做的事。我认为这需要大量的案例陈述:
update table t
set subtitle = (case when subtitle like concat(title, ':%', title)
then trim(substring_index(substring_index(subtitle, ':', 2), ':', -1)))
when subtitle like concat(title, '-%', title)
then trim(substring_index(substring_index(subtitle, '-', 2), '-', -1)))
when subtitle like concat('%:', title)
then trim(substring_index(subtitle, ':', 1))
when subtitle like concat('%-', title)
then trim(substring_index(subtitle, '-', 2))
else subtitle
end)
首先在select
中对此进行测试。此外,如果字幕的名称中有连字符或冒号,则在某些情况下不会起作用。
答案 1 :(得分:0)
我决定打破修改前缀&后缀为两个单独的查询以使其更容易,以及第三次检查,因为我注意到有时节目标题在字幕前的括号中。这就是我最后使用的内容(后面是从列中修剪任何剩余空格的最终操作)。
UPDATE table
set subtitle = (case
when subtitle like concat(title,': %') /*Title: Subtitle*/
then trim(LEADING concat(title,': ') FROM subtitle)
when subtitle like concat(title,' - %') /*Title - Subtitle*/
then trim(LEADING concat(title,' - ') FROM subtitle)
when subtitle like concat('(',title,') %') /*(Title) Subtitle*/
then trim(LEADING concat('(',title,') ') FROM subtitle)
else subtitle end);
UPDATE table
set subtitle = (case
when subtitle like concat('%: ',title) /*Subtitle: Title*/
then trim(TRAILING concat(': ',title) FROM subtitle)
when subtitle like concat('% - ',title) /*Subtitle - Title*/
then trim(TRAILING concat(' - ',title) FROM subtitle)
when subtitle like concat('%(',title,') ') /*Subtitle (Title)*/
then trim(TRAILING concat('(',title,') ') FROM subtitle)
else subtitle end);
UPDATE table
set subtitle = trim(BOTH ' ' FROM subtitle);
感谢@ gordon-lindoff。