2013-10-21 5 views
20

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

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

使用しているデータベースエンジンはどれですか?それはSQL Serverではありません。 – acfrancis

答えて

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

さらに参考のためにhttp://www.w3resource.com/mysql/string-functions/mysql-substring_index-function.phpを使用してください。

+2

これは、いくつかの問題を引き起こす可能性があります。 '='が列にない場合、次のように使用できます: 'SELECT IF(LOCATE ''、supplier_reference)、SUBSTRING_INDEX(supplier_reference、 '='、 - 1)、default_value )FROM ps_product; 'とし、元の完全な列を返す代わりにデフォルト値を設定することができます。 – golddragon007

+0

文字列に複数の '='が含まれていて、最初に '='の後にすべてを入れたい場合はどうすればよいですか? –

7

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

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

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

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

あなたの貢献に感謝します。これがどのようにして問題を解決するかの説明を追加するとより効果的です。 –

0

SQL Managementスタジオの場合、私はBWSの回答のバリエーションを使用しました。シンボルが存在しない場合、これは「=」、またはNULLの右側にあるデータを取得します。文字列に「=」文字が複数ある場合、MySQLでは

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 
1

を、この作品

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

最初に見つかった部分文字列(+1)の後に部分文字列を返します。

+0

これは、複数の '='があり、最初に '='が出現した後に文字列が必要な場合に便利です。 –

関連する問題