2011-01-03 16 views
1

コンマ区切りの値を持つ列があり、コンマが13行あるすべての行を選択する必要があります。それらは別々の数字なので、コンマを含む文字列については心配する必要はありません。どうすればいい?あなたは13個のカンマを持つものとして14個のカンマで文字列をカウントした場合コンマで区切られたリスト項目の数を選択します。

+1

フィールドにコンマ区切りの値を保存しないでください。これは、必要なものが関連する表であることを示します。それからあなたは簡単なカウントをすることができます。 – HLGEM

答えて

1

、これは動作します:

SELECT * FROM table WHERE column LIKE '%,%,%,%,%,%,%,%,%,%,%,%,%,%' 

%は(ゼロ長さを含む)任意の文字列にマッチします。

+2

これは、13を超えるカンマを持つすべてのレコードに対して誤った結果を返します。これは危険なコードであり、受け入れられた回答であっても、アプリケーションで使用されるべきではありません。 – HLGEM

+0

@HLGEM a)13個以上のカンマとの照合について警告しました。 b)文字列「aaa」に2 aが含まれている(質問は明示的ではないので、警告付きの私の回答、OPはそれが問題ではないことを示唆している)c)助けてください。 – marcog

+0

すべてのケースで予期した結果が得られず、人々が警告を見たり正しく理解しないことがあるため、危険です。 ajrealのソリューションはより優れており、OPは自分の問題に最適なソリューションを選択しなかったことを知る必要があります。 – HLGEM

2

PostgreSQLを使用している場合は、正規表現を使用することもできます。

ただし、複数の列ではなくカンマ区切りの値を持つ単一の列があるのが良い理由です。好きな

5

代替(私はlikeを好きではない、と14個のカンマ以上が含まれている場合は、上記に失敗します)より良い指標を利用のための

select * from table 
where length(replace(your_column, ',', ''))=length(your_column)-13; 

、あなたのテーブル

+0

+1。もちろん、このようなステートメントを本番環境に導入することは決してしませんでした。 –

+0

@goreSplatter:agree !!! – ajreal

0
を正規化するために努めるべきです

PostgreSQLでは次のことができます。

select col from table where length(regexp_replace(col, '[^,]', '', 'g')) = 13; 
関連する問題