1

それは私のテーブルの行です:

++ id ---- text ++++++++++++++
-- 1  ---- '90','80,'50' -----
-- 2  ---- '30','2','1_2' --
-- 3  ---- '10_2','5_3' -----

ご覧textのとおり、2 種類の数字が含まれています。一方にはアンダースコアがなく、もう一方にはアンダースコアがあります。

アンダースコア (タイプ 1) のない数字が少なくとも 1 つある行を選択したい。このようなもの: (結果セット)

++ id ---- text ++++++++++++++
-- 1  ---- '90','80,'50' -----
-- 2  ---- '30','2','1_2' --

(3は無視されます)

どうやってするか?( で可能だと思いますNOT LIKEが、書き方がわかりません)

4

3 に答える 3

2

あなたの数字はどのくらいですか?これを試して:

SELECT t1.id,t1.txt FROM t t1, t t2 WHERE t1.txt LIKE "%'__'%" AND t2.txt NOT LIKE "%\__',%"
于 2012-10-22T13:32:45.977 に答える
1

以下のクエリは、文字列内のコンマの数をカウントします。個別の数値の数は、数値がコンマで区切られているため、コンマの数、文字列内のアンダースコアの数より1多い数として計算できます。

select id,
len(text) - len(replace(text,',','')) as count_of_commas,
len(text) - len(replace(text,',','')) + 1 as count_of_number,
len(text) - len(replace(text,'_','')) as count_of_underscore,
len(text) - len(replace(text,',','')) + 1 - (len(text) - len(replace(text,'_',''))) as zero_if_no_number_without_underscore_exists
from t1

上記のクエリでは、次の結果が得られます。

ここに画像の説明を入力してください

上記のクエリのロジックを使用して、次のクエリを使用して目的の結果を取得できます。

select * from t1
where len(text) - len(replace(text,',','')) + 1 - (len(text) - len(replace(text,'_',''))) != 0

つまり、アンダースコアなしで少なくとも1つの数値が存在する行を返します。

于 2012-10-22T13:11:45.487 に答える
1

ではできませんが、正規表現を使用LIKEする ではできます。RLIKE

select * from mytable
where `text` rlike "'\d+_\d+'"
于 2012-10-21T00:25:58.623 に答える