はじめに
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
LONG VARCHAR型の列にLIKE検索する方法
LONG VARCHAR型にREGEXP_LIKE関数を使用してLIKE検索することができます。
REGEXP_LIKEの構文は以下になります。
[REGEXP_LIKEの構文]
REGEXP_LIKE(<列名>,<検索文字列>)
[例]
REGEXP_LIKE(COL1,’A’)
※LONG VARCHAR型とVARCHAR型の列サイズに関しては下記URLを参照ください。
https://www.ashisuto.co.jp/cm/analytics-database/data-types.html
実行例
REGEXP_LIKE関数を使用してLIKE検索する方法
■tbl1表に65,010バイトのデータ格納されています。
・1~65,000バイトまで”A”が格納されています。
・65,000~65,010バイトまで”B”が格納されています。
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関数で検索することができます。
dbadmin=> select count(*) from tbl1 where regexp_like(col1,'A');
count
-------
1
(1 row)■”B”が含まれるデータをREGEXP_LIKE関数で検索することができます。
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
実行例
■”A”が含まれるデータをLIKEで検索することができます。
dbadmin=> select count(*) from tbl1 where col1::varchar like '%A%';
count
-------
1
(1 row)検証バージョンについて
この記事の内容はVertica 9.1で確認しています。