MySQL在特定字符串之前检索值

时间:2017-09-18 20:53:01

标签: mysql sql

我的数据库中有多行,其中的描述采用以下格式之一:

SC068 NGN 399ppc + 139ppm
SC068 NGN 139ppm
SC079 NGN 200ppc + 200ppm (After 60 Seconds)
SC060 NGN 200ppc

如何在ppc和/或ppm之前检索数字?

2 个答案:

答案 0 :(得分:1)

假设每个只出现一次,你可以这样做:

select (case when col like '%ppm%'
             then substring_index(substring_index(col, 'ppm', 1), ' ', -1) + 0 
        end) as ppm_num,
       (case when col like '%ppc%'
             then substring_index(substring_index(col, 'ppc', 1), ' ', -1) + 0
        end) as ppc_num

这些只适用于字符串中的第一次出现。 + 0将关键字前的字符静默转换为数字。

答案 1 :(得分:0)

基于Gordon的,您可以使用CASE WHEN

SELECT CASE WHEN INSTR(description,'ppm') <> 0
            THEN SUBSTRING_INDEX(SUBSTRING_INDEX(description, 'ppm', 1), ' ', -1) + 0
            WHEN INSTR(description,'ppc') <> 0
            THEN SUBSTRING_INDEX(SUBSTRING_INDEX(description, 'ppc', 1), ' ', -1) + 0
            ELSE ''
        END instr_num
  FROM t

示例数据

CREATE TABLE t
(description VARCHAR(100));

INSERT INTO t VALUES('SC068 NGN 399ppc + 139ppm');
INSERT INTO t VALUES('SC068 NGN 139ppm');
INSERT INTO t VALUES('SC079 NGN 200ppc + 200ppm (After 60 Seconds)');
INSERT INTO t VALUES('SC060 NGN 200ppc');

结果

instr_num
139
139
200
200