mysql SQL SELECT特定字符后的所有内容

lrpiutwd  于 2023-02-21  发布在  Mysql
关注(0)|答案(8)|浏览(159)

我需要提取最后一个'='(http://www.domain.com?query=blablabla-〉blablabla)之后的所有内容,但是这个查询返回了整个字符串。

SELECT RIGHT(supplier_reference, CHAR_LENGTH(supplier_reference) - SUBSTRING('=', supplier_reference)) 
FROM ps_product
2hh7jdfx

2hh7jdfx1#

select SUBSTRING_INDEX(supplier_reference,'=',-1) from ps_product;

请将此用作进一步参考。

lx0bsm1f

lx0bsm1f2#

尝试以下操作(如果字符串中有多个“=”字符,它应该可以工作):

SELECT RIGHT(supplier_reference, (CHARINDEX('=',REVERSE(supplier_reference),0))-1) FROM ps_product
c0vxltue

c0vxltue3#

在MySQL中尝试此操作。

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

4zcjmb1e4#

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

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

它返回找到第一个=后(+1)的子字符串

2o7dmzc5

2o7dmzc55#

如果字符串为

str = 'abc=def=ghi'

要向右选择:

select substring_index(str,'=',-1) from tablename ==> result is 'ghi'
select substring_index(str,'=',-2) from tablename ==> result is 'def=ghi'

向左选择

select substring_index(str,'=',-1) from tablename ==> result is 'abc'

select substring_index(str,'=',2) from tablename ==> result is 'abc=def'
vtwuwzda

vtwuwzda6#

我一直在做类似的事情,经过几次尝试和失败,我想出了这个:
示例:字符串至测试开启= 'ab,cd,ef,gh'
我想从字符串中提取最后一个出现的“,”(逗号)之后的所有内容...结果是“gh”。

我的问题是:

SELECT SUBSTR('ab,cd,ef,gh' FROM (LENGTH('ab,cd,ef,gh') - (LOCATE(",",REVERSE('ab,cd,ef,gh'))-1)+1)) AS `wantedString`

现在让我试着解释一下我做了什么...
1.我必须找到字符串中最后一个“,”的位置,并计算wantedString长度,使用LOCATE(",",REVERSE('ab,cd,ef,gh'))-1,通过反转初始字符串,我实际上必须找到字符串中第一个出现的“,”......这并不难做到......然后使用-1,实际上找到没有“,"的字符串长度。
1.通过从初始字符串长度中减去我在第一步中计算的字符串长度来计算wantedString的位置:
长度(“ab,cd,ef,gh ')-(定位(“,",反向(”ab,cd,ef,gh'))-1)+1
我有(+1),因为我实际上需要最后一个“,”之后的字符串位置..并且不包含“,"。希望它有意义。
1.剩下要做的就是对初始字符串FROM计算出的位置运行SUBSTR。

我还没有在大字符串上测试过这个查询,所以我不知道它有多慢。所以如果有人真的在大字符串上测试它,我很乐意知道结果。

8fsztsew

8fsztsew7#

对于SQL Management studio,我使用了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
oaxa6hgo

oaxa6hgo8#

SELECT NULLIF(SUBSTRING_INDEX(column, '=', -1), column)

相关问题