web-dev-qa-db-ja.com

特定の文字の後のすべてをSQL SELECT

最後の「=」の後にすべてを抽出する必要があります( http://www.domain.com?query=blablabla -> blablabla)が、このクエリは文字列全体を返します。私はここでどこを間違えましたか:

SELECT RIGHT(supplier_reference, CHAR_LENGTH(supplier_reference) - SUBSTRING('=', supplier_reference)) 
FROM ps_product
28
popkutt
select SUBSTRING_INDEX(supplier_reference,'=',-1) from ps_product;

詳細については、 http://www.w3resource.com/mysql/string-functions/mysql-substring_index-function.php を使用してください。

49
virus

これを試してください(文字列に複数の「=」文字がある場合は動作するはずです):

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

MySQLでこれを試してください。

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

MySQLでは、文字列に複数の「=」文字がある場合に機能します

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

最初の=を見つけた後(+1)の部分文字列を返します

2
Ludo

私は似たようなことに取り組んでおり、いくつかの試行錯誤の後、これを思い付きました:

例: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`
_

今、私がやったことを試して説明してみましょう...

  1. 文字列から最後の "、"の位置を見つけ、LOCATE(",",REVERSE('ab,cd,ef,gh'))-1を使用して、最初の "、"の出現を見つけなければならなかった最初の文字列を逆にして、必要な文字列の長さを計算する必要がありましたstring ...これは難しいことではありませんでした...そして-1を使用して、「、」なしで実際に文字列の長さを見つけます。

  2. 最初の文字列の長さから最初のステップで計算した文字列の長さを引くことにより、wantedStringの位置を計算します。

    LENGTH( 'ab、cd、ef、gh')LOCATE( "、"、REVERSE( 'ab、cd、ef、gh'))-1)+1

(+1)があります。実際には、最後の "、"の後の文字列の位置が必要で、 "、"を含まないためです。それが理にかなっていることを願っています。

  1. あとは、計算された位置からの最初の文字列でSUBSTRを実行するだけです。

---(クエリを大きな文字列でテストしていないので、それがどれほど遅いかわかりません。だから誰かが実際に大きな文字列でテストした場合、結果を知りたいと思います。

0
Rosu Flavius

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
0
Jacob Morris