我有一个巨大的数据库,里面装满了科学名字,如下所示:
Canis lupus
Homo sapiens
我用破折号替换空格将它们转换为URL' s ...
Canis-lupus
Homo-sapiens
但是有很多科学名字看起来像这样:
Panthera (Felis) leo
Allactaga (Allactaga) vinogradovi
任何人都可以建议剥离的最佳方法1)括号,2)括号内容,3)用括号括起来之前或之后的任何空格,所以输出看起来像这样?:
Panthera-leo
我正在使用PHP和MySQL。
答案 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]
;