我需要在最后一个'='(http://www.domain.com?query=blablabla - > blablabla)之后提取所有内容,但此查询会返回整个字符串。我在哪里出错:
SELECT RIGHT(supplier_reference, CHAR_LENGTH(supplier_reference) - SUBSTRING('=', supplier_reference))
FROM ps_product
答案 0 :(得分:47)
select SUBSTRING_INDEX(supplier_reference,'=',-1) from ps_product;
请使用http://www.w3resource.com/mysql/string-functions/mysql-substring_index-function.php作为进一步参考。
答案 1 :(得分:8)
试试这个(如果字符串中有多个'='字符,它应该有效):
SELECT RIGHT(supplier_reference, (CHARINDEX('=',REVERSE(supplier_reference),0))-1) FROM ps_product
答案 2 :(得分:5)
在MySQL中试试这个。
right(field,((CHAR_LENGTH(field))-(InStr(field,','))))
答案 3 :(得分:1)
在MySQL中,如果字符串
中有多个'='字符,则此方法有效SUBSTRING(supplier_reference FROM (LOCATE('=',supplier_reference)+1))
在找到第一个=
之后返回(+1)之后的子串答案 4 :(得分:0)
对于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
答案 5 :(得分:0)
我一直在做类似的事情,经过几次尝试和失败之后才想到:
示例: STRING-TO-TEST-ON ='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`
现在让我尝试解释一下我做了什么...
我必须从字符串中找到最后一个“”的位置,并使用LOCATE(",",REVERSE('ab,cd,ef,gh'))-1
来反转初始字符串,从而计算出想要的字符串长度,而实际上我必须找到“ ”中的字符串...,这并不难... ...然后通过-1实际找到不带“,”的字符串长度。
通过从初始字符串长度中减去我在第一步中计算出的字符串长度来计算我想要的字符串的位置:
LENGTH('ab,cd,ef,gh')-(LOCATE(“,”,REVERSE('ab,cd,ef,gh')-1)+1
我有(+1),因为我实际上需要最后一个“,” ..之后的字符串位置,并且不包含“,”。希望有道理。
我尚未在大字符串上测试查询,因此我不知道它有多慢。因此,如果有人实际上在一个大字符串上对其进行测试,我将很高兴知道结果。