Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL在特定字符串之前检索值_Mysql_Sql - Fatal编程技术网

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

MySQL在特定字符串之前检索值,mysql,sql,Mysql,Sql,我的数据库中有多行,其描述采用以下格式之一: SC068 NGN 399ppc + 139ppm SC068 NGN 139ppm SC079 NGN 200ppc + 200ppm (After 60 Seconds) SC060 NGN 200ppc 如何检索ppc和/或ppm之前的数字?假设每个数字只出现一次,您可以执行以下操作: select (case when col like '%ppm%' then substring_index(substring_

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

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

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

假设每个数字只出现一次,您可以执行以下操作:

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将关键字前的字符静默转换为数字。

基于Gordon的,您可以在

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
结果

instr_num
139
139
200
200

到目前为止你试过什么吗?StackOverflow不是一个免费的代码编写服务,它希望您能够这样做。请更新您的问题,以显示您已经尝试过的内容,并显示您在a中面临的具体问题。为什么使用这些字符串?数据库表由列组成,那么为什么不首先单独存储这些值呢?除此之外,您还可以轻松地查找MySQL的字符串函数:。由于您没有做任何研究,您可能不知道从何处开始处理您特别提出的问题,您可以使用WHILE循环在您的列上循环,在其中,您可以使用WHILE循环分割所有存在空白的内容。此时,您可以使用like%pcc%或like%ppm%搜索该表,并通过多种方法提取ppc、ppm。您可以使用空字符串(无空格)替换pcc或ppmREPLACE@ThorstenKettner-理论上的好主意。在实践中并不总是可行的,特别是如果您正在使用现有的数据结构,例如,一些CRM/ERP类型的软件在幕后有着臭名昭著的糟糕数据结构……谢谢您,这真的很有帮助。运行查询时,我看到的唯一问题是SC060 NGN 200ppc这样的值,两列都返回200。您可以使用CASE when,但这将仅获取数字的第一个实例,无论它是ppc还是ppm
instr_num
139
139
200
200