从URL中删除括号(和内容)

时间:2015-10-01 23:42:41

标签: php mysql

我有一个巨大的数据库,里面装满了科学名字,如下所示:

Canis lupus
Homo sapiens

我用破折号替换空格将它们转换为URL' s ...

Canis-lupus
Homo-sapiens

但是有很多科学名字看起来像这样:

Panthera (Felis) leo 
Allactaga (Allactaga) vinogradovi

任何人都可以建议剥离的最佳方法1)括号,2)括号内容,3)用括号括起来之前或之后的任何空格,所以输出看起来像这样?:

Panthera-leo

我正在使用PHP和MySQL。

1 个答案:

答案 0 :(得分:1)

这应该这样做:

SELECT CONCAT(LEFT([field], INSTR([field], '(')-1)
              , '-'
              , SUBSTR([field], INSTR([field], ')')+1)
       ) AS innerTrimmedField
FROM [table]
WHERE [field] LIKE '%(%)%'
;

请注意,您仍然需要处理空格。如果括号在它们之前和/或之后有空格,那么所有这些空格现在彼此相邻;所以你也需要处理这个问题,除非你不介意Panthera (Felis) leo成为Panthera---leo

如果您需要所有条目的列表,可以使用非括号内容(使用WHERE [field] NOT LIKE '%(%)%'进行联合)。如果您使UNION查询子查询,则可以使用外部查询同时处理所有这些查询的空间替换。

但这可能会更快,更灵活一些:

SELECT REPLACE(
        IF([field] LIKE '%(%)%'
           , CONCAT(LEFT([field], INSTR([field], '(')-1)
                    , '-'
                    , SUBSTR([field], INSTR([field], ')')+1)
                   )
           , [field]
          )
        , ' ', '-') AS normalizedStrings
FROM [table]
WHERE [standard filter conditions you might want]
;