コンマ区切りのデータがある列があります:
1,2,3
3,2,1
4,5,6
5,5,5
CSV文字列の各値を個別にクエリする検索を実行しようとしています。
0<first<5 and 1<second<3 and 2<third<4
すべてのクエリを返し、自分で分割して比較することができます。 mysqlがその処理作業を行うようにこれを行う方法があるかどうか興味があります。ありがとう!
つかいます
substring_index(`column`,',',1) ==> first value
substring_index(substring_index(`column`,',',-2),',',1)=> second value
substring_index(substring_index(`column`,',',-1),',',1)=> third value
あなたのwhere句で。
SELECT * FROM `table`
WHERE
substring_index(`column`,',',1)<0
AND
substring_index(`column`,',',1)>5
うまくいくようです:
_substring_index ( substring_index ( context,',',1 ), ',', -1) )
substring_index ( substring_index ( context,',',2 ), ',', -1) )
substring_index ( substring_index ( context,',',3 ), ',', -1) )
substring_index ( substring_index ( context,',',4 ), ',', -1) )
_
1番目の値、2番目、3番目などを意味します。
内側の_substring_index
_は、コンマで区切られた最初のn個の値を返します。したがって、元の文字列が「34,7,23,89」の場合、substring_index( context,',', 3)
は「34,7,23」を返します。
外側の_substring_index
_は内側の_substring_index
_によって返された値を取り、_-1
_は最後の値を取ることができます。したがって、「34,7,23」から「23」を取得します。
_-1
_の代わりに_-2
_を指定すると、最後の2つの値を取得したため、「7,23」が表示されます。
_select * from MyTable where substring_index(substring_index(prices,',',1),',',-1)=3382;
_
ここで、prices
はMyTable
の列の名前です。
通常 substring_index はあなたが望むことをします:
mysql> select substring_index("[email protected]","@",-1);
+-----------------------------------------+
| substring_index("[email protected]","@",-1) |
+-----------------------------------------+
| gmail.com |
+-----------------------------------------+
1 row in set (0.00 sec)
MySQL REGEXPまたはLIKEを使用して、必要なものを取得できます。
パターンマッチングに関するMySQLドキュメント を参照してください。
関連する質問に私が投稿した別のバリエーションがあります。 REGEX
は境界外にあるかどうかを確認するのに役立ちます。したがって、テーブル列の場合はwhere句に配置します。
_SET @Array = 'one,two,three,four';
SET @ArrayIndex = 2;
SELECT CASE
WHEN @Array REGEXP CONCAT('((,).*){',@ArrayIndex,'}')
THEN SUBSTRING_INDEX(SUBSTRING_INDEX(@Array,',',@ArrayIndex+1),',',-1)
ELSE NULL
END AS Result;
_
SUBSTRING_INDEX(string, delim, n)
は最初のnを返しますSUBSTRING_INDEX(string, delim, -1)
は最後の値のみを返しますREGEXP '((delim).*){n}'
は、区切り文字がn個あるかどうかを確認します(つまり、境界内にいます)これの補遺として、次の形式の文字列があります。
ここで、文字列の末尾から数値部分を分割します。これは可能な解決策を指しているようです:
http://lists.mysql.com/mysql/222421
ただし、問題は、「はい、一致します」という答えしか得られず、正規表現の一致の開始インデックスが得られないことです。
それは働いています。
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(
SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(col,'1', 1), '2', 1), '3', 1), '4', 1), '5', 1), '6', 1)
, '7', 1), '8', 1), '9', 1), '0', 1) as new_col
FROM table_name group by new_col;