Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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 SQL选择特定字符后的所有内容_Mysql_Sql_Substring_String Length - Fatal编程技术网

Mysql SQL选择特定字符后的所有内容

Mysql SQL选择特定字符后的所有内容,mysql,sql,substring,string-length,Mysql,Sql,Substring,String Length,我需要提取最后一个“=”(->blablabla)之后的所有内容,但此查询返回整个字符串。我在这里哪里出错了: SELECT RIGHT(supplier_reference, CHAR_LENGTH(supplier_reference) - SUBSTRING('=', supplier_reference)) FROM ps_product 请使用以供进一步参考。尝试此操作(如果字符串中有多个“=”字符,则此操作应有效): 在MySQL中试试这个 right(field,((CHAR_

我需要提取最后一个“=”(->blablabla)之后的所有内容,但此查询返回整个字符串。我在这里哪里出错了:

SELECT RIGHT(supplier_reference, CHAR_LENGTH(supplier_reference) - SUBSTRING('=', supplier_reference)) 
FROM ps_product
请使用以供进一步参考。

尝试此操作(如果字符串中有多个“=”字符,则此操作应有效):

在MySQL中试试这个

right(field,((CHAR_LENGTH(field))-(InStr(field,','))))

对于SQLManagementStudio,我使用了BWS答案的变体。这将获取“=”右侧的数据,如果符号不存在,则为NULL:

   CASE WHEN (RIGHT(supplier_reference, CASE WHEN (CHARINDEX('=',supplier_reference,0)) = 0 THEN
    0 ELSE CHARINDEX('=', supplier_reference) -1 END)) <> '' THEN (RIGHT(supplier_reference, CASE WHEN (CHARINDEX('=',supplier_reference,0)) = 0 THEN
    0 ELSE CHARINDEX('=', supplier_reference) -1 END)) ELSE NULL END
CASE-WHEN(右(供应商参考,CASE-WHEN(CHARINDEX('=',供应商参考,0))=0然后
0 ELSE CHAINDEX('=',供应商\参考)-1结束))“”然后(右(供应商\参考,案例为(CHAINDEX('=',供应商\参考,0))=0然后
0 ELSE CHAINDEX('=',供应商_引用)-1 END)ELSE NULL END

在MySQL中,如果字符串中有多个“=”字符,则此选项有效

SUBSTRING(supplier_reference FROM (LOCATE('=',supplier_reference)+1))

它在(+1)找到第一个=

后返回子字符串。我一直在做类似的事情,经过几次尝试,失败后得出以下结论:

例如: STRING-TO-TEST-ON='ab、cd、ef、gh'

我想从字符串中提取最后一次出现“,”(逗号)之后的所有内容。。。导致“生长激素”

我的问题是:

SELECT SUBSTR('ab,cd,ef,gh' FROM (LENGTH('ab,cd,ef,gh') - (LOCATE(",",REVERSE('ab,cd,ef,gh'))-1)+1)) AS `wantedString`
现在让我试着解释一下我做了什么

  • 我必须从字符串中找到最后一个“,”的位置,并使用
    LOCATE(“,”,REVERSE('ab,cd,ef,gh'))-1来计算所需的字符串长度,通过反转初始字符串,我实际上必须找到字符串中第一个出现的“,”。。。这并不难做到。。。然后-1来实际查找不带“,”的字符串长度

  • 通过从初始字符串长度减去我在第一步计算的字符串长度来计算我想要的字符串的位置:

    长度('ab,cd,ef,gh')-(定位(“,”,反向('ab,cd,ef,gh'))-1)+1

  • 我有(+1),因为我实际上需要最后一个“,”之后的字符串位置。。并且不包含“,”。希望它有意义

  • 剩下要做的就是从计算位置在初始字符串上运行SUBSTR

  • 我还没有在大字符串上测试查询,所以我不知道它有多慢。因此,如果有人真的在一个大字符串上测试它,我会很高兴知道结果。

    您使用的是什么数据库引擎?这不是SQL Server,对吗?请看以下答案:谢谢您的贡献。添加一些关于如何解决问题的解释会更有帮助。这可能会导致一些问题,如果列中没有“=”,那么您可以使用:
    从ps_产品中选择IF(LOCATE(“=”,supplier_reference),SUBSTRING_INDEX(supplier_reference,“=”,-1),default_值SUBSTRING(supplier_reference FROM (LOCATE('=',supplier_reference)+1))
    
    SELECT SUBSTR('ab,cd,ef,gh' FROM (LENGTH('ab,cd,ef,gh') - (LOCATE(",",REVERSE('ab,cd,ef,gh'))-1)+1)) AS `wantedString`