2011-07-30 8 views
0

私は、次のような文字列を含む列があります:私は返す列からアポストロフィー内にあるデータのみを選択する。

Core Authoring Files 

への私の選択は唯一のアポストロフィ内にあるデータを選択する方法はありたい

Approved By Smith, John For 'Core Authoring Files' 

を?

+0

使用しているデータベースはどれですか。おそらくPHPのようなプログラミング言語を使用して内側の文字列を取得する必要がありますが、特定のデータベースのカスタムライブラリが役立つかもしれません。あるいは、db関数として実行することもできます。 –

答えて

0

これを試してください。ただし、部分文字列はデータベースシステムによって多少異なりますので、使用しているサーバーによってこの部分を少し変更する必要があります。

select 
substring(column, charindex("'", column, 0) as begin), charindex("'", column, begin + 1) - begin)) as thestring 
from yourTable; 

これが機能する方法は、最初の引用符の後の文字で始まると、それらを差し引い文字列に二重引用符を見つけ、文字列の最初の引用文字の位置を見つけるために、CHARINDEX関数を使用することですあなたが抽出したい文字列の長さを取得する位置。これらの2つの数値は、部分文字列関数(column、startposition、length)を得るために部分文字列関数に渡されます。

希望これは、私はエスケープ引用符は、データベースに格納できるようにすることからあなたを説得するために第2の利用したいと思い

EDIT

に役立ちます。これは、SQLインジェクション攻撃を要請している状況です。あなたがよく知らない人は、このパスをあまりにも遠くに進める前にSQLインジェクションを調べてください。

+0

データベース内のエスケープされていない引用符がなぜ問題なのか理解できません。一旦データベースに入ってしまえば、脅威ではありません。潜在的な危険であるエスケープされていないユーザー入力の引用符です。 – eaolson

+0

この場合、SQL文を使用してテキストを操作すると、SQLインタプリタによって文字列が解釈され、埋め込まれたコードにヒットするとそのコードが実行される可能性があるためです。 – Bueller

+0

素晴らしい...ありがとう。私はあなたのロジックのいくつかを取って、この作品を作った。 – Shaun

0

PostgreSQLでは、これはregexp_replace文字列演算子を使用すると非常に簡単です。

SELECT * FROM (
    SELECT 
     regexp_replace(title, E'.*\'\(.*\)\'.*', E'\\1') AS result 
    FROM 
     items) x 
WHERE 
    result IS NOT null; 
関連する問題