OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

LONG VARCHAR型の列にLIKE検索をする方法

公開日:
更新日:
基本操作
#vsql

はじめに

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で確認しています。