はじめに
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を参照ください。
https://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で確認しています。- 投稿タグ
- REGEXP_LIKE, LONG VARCHAR, LIKE


