はじめに
SQLでLONG VARCHAR型の列にLIKE検索する方法をご紹介します。LONG VARCHAR型の列に、通常のLIKE検索を行うと下記エラーが表示され検索することができません。
(例)
dbadmin=> select count(*) from tbl1 where col1 like ‘%A%’;
ERROR 4286: Operator does not exist: long varchar ~~ unknown
HINT: No operator matches the given name and argument type(s). You may need to add explicit type casts
ERROR 4286: Operator does not exist: long varchar ~~ unknown
HINT: No operator matches the given name and argument type(s). You may need to add explicit type casts
LONG VARCHAR型の列にLIKE検索する方法
LONG VARCHAR型にREGEXP_LIKE関数を使用してLIKE検索することができます。REGEXP_LIKEの構文は以下になります。
[REGEXP_LIKEの構文]
REGEXP_LIKE(<列名>,<検索文字列>)
[例]
REGEXP_LIKE(COL1,’A’)
REGEXP_LIKE(<列名>,<検索文字列>)
[例]
REGEXP_LIKE(COL1,’A’)
※LONG VARCHAR型とVARCHAR型の列サイズに関しては下記URLを参照ください。
http://vertica-tech.ashisuto.co.jp/data-types/
実行例
REGEXP_LIKE関数を使用してLIKE検索する方法
■tbl1表に65,010バイトのデータ格納されています。・1~65,000バイトまで”A”が格納されています。
・65,000~65,010バイトまで”B”が格納されています。
1 2 3 4 5 6 7 8 9 10 11 |
dbadmin=> \d tbl1 List of Fields by Tables Schema | Table | Column | Type | Size | Default | Not Null | Primary Key | Foreign Key --------+-------+--------+------------------------+----------+---------+----------+-------------+------------- public | tbl1 | col1 | long varchar(32000000) | 32000000 | | f | f | (1 row) dbadmin=> select * from tbl1; AAAAAAAAAA.....BBBBBBBBBB ▲ 65,000バイト |
■”A”が含まれるデータをREGEXP_LIKE関数で検索することができます。
1 2 3 4 5 |
dbadmin=> select count(*) from tbl1 where regexp_like(col1,'A'); count ------- 1 (1 row) |
■”B”が含まれるデータをREGEXP_LIKE関数で検索することができます。
1 2 3 4 5 |
dbadmin=> select count(*) from tbl1 where regexp_like(col1,'B'); count ------- 1 (1 row) |
その他
LONG VARCHAR型の列に65,000バイト以下のデータしか格納されていない場合は、VARCHAR型にキャストすることでLIKE検索することができます。LONG VARCHAR型をVARCHAR型にキャストする構文は以下になります。
[キャストの構文]
<列名>::<データ型>
[例]
COL1::VARCHAR
<列名>::<データ型>
[例]
COL1::VARCHAR
実行例
■”A”が含まれるデータをLIKEで検索することができます。
1 2 3 4 5 |
dbadmin=> select count(*) from tbl1 where col1::varchar like '%A%'; count ------- 1 (1 row) |
検証バージョンについて
この記事の内容はVertica 9.1で確認しています。- 投稿タグ
- LONG VARCHAR, LIKE, REGEXP_LIKE