OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

「全角・半角」を区別しない方法

公開日:
更新日:
技術情報
基本操作
#SQL

はじめに

SQLの実行時に、「全角・半角」を区別するかどうかは、データベース毎に動作が異なります。Verticaは、デフォルトでは「全角・半角」を区別して扱うため、お客様からは想定した結果が得られないといったご相談をいただくことがあります。

本記事では、localeを使用し「全角・半角」を区別しない方法をご紹介します。

localeとは

localeとは、ユーザの言語や国、照合順序などの特殊な設定を指定するものであり、Verticaでは文字列関数の動作やSQLコマンドの順序付け(例:ORDER BY)などに使用されます。

localeの詳細は、以下のマニュアルをご参照ください。
Implement locales for international data sets

「全角・半角」を区別しない方法

デフォルトのlocaleは、en_USが設定されています。localeにja_JPを設定すると「全角・半角」が区別されません。

localeの設定方法

セッションレベルで設定する場合

セッションレベルのlocalは、vsqlやクライアントドライバのパラメータを変更することで設定できます。変更は実行セッションにて、即時反映されます。

vsqlの設定例

vsqlの場合は、「SET LOCALE TO」あるいは「\locale」で設定します。

「SET LOCALE TO」を使用した方法

=> show locale;
  name  |               setting
--------+--------------------------------------
 locale | en_US@collation=binary (LEN_KBINARY)
(1 row)

=> SET LOCALE TO ja_JP;
INFO 2567:  Canonical locale: 'ja_JP'
Standard collation: 'LJA'
Japanese (Japan)  日本語 (日本)
SET

=> show locale;
  name  |   setting
--------+-------------
 locale | ja_JP (LJA)
(1 row)

「\locale」を使用した方法

=> \locale
en_US@collation=binary

=> \locale ja_JP
INFO 2567:  Canonical locale: 'ja_JP'
Standard collation: 'LJA'
Japanese (Japan)  日本語 (日本)

=> \locale
ja_JP

クライアントドライバの設定例

ODBC、JDBC、ADO.NET のlocaleを設定する方法は、以下のマニュアルをご参照ください。

Setting the locale and encoding for ODBC sessions
Setting the locale for JDBC sessions
Setting the locale for ADO.NET sessions

ODBC データソースをご利用の場合は、「Server Settings」→「Locale」から設定できます。

DBレベルで設定する場合

DBレベルのlocalは、「DefaultSessionLocale」パラメータを変更することで設定できます。変更は設定後の新規セッションから反映され、実行セッションには設定が反映されません。

## localeを変更します。

=>  ALTER DATABASE  SET DefaultSessionLocale = 'ja_JP';
ALTER DATABASE

## 変更後の値はCONFIGURATION_PARAMETERSシステムテーブルから確認します。

=> select * from CONFIGURATION_PARAMETERS where parameter_name ='DefaultSessionLocale';
-[ RECORD 1 ]-----------------+------------------------------------------------------------
node_name                     | ALL
parameter_name                | DefaultSessionLocale
current_value                 | ja_JP
restart_value                 | ja_JP
database_value                | ja_JP
default_value                 | en_US@collation=binary
current_level                 | DATABASE
restart_level                 | DATABASE
is_mismatch                   | f
groups                        |
allowed_levels                | NODE, DATABASE
superuser_visible_only        | f
change_under_support_guidance | f
change_requires_restart       | f
description                   | Defines the default session startup Locale for the database

localeを変更した場合の実行例

localeをja_JPに設定した場合の例を解説します。例では、「全角・半角」が含まれたtest_a表を使用します。

## 「全角・半角」が含まれたtest_a表があります。

=> select * from test_a;
   c1
--------
 AAA
 AAA
(2 rows)

セッションレベルでlocaleをja_JPに設定し、selectを実行した例です。ja_JPでは、「全角・半角」を区別しないため、検索条件を「AAA」(半角)とした場合は「AAA」(半角)、「AAA」(全角)が選択されます。

## 検索条件に大文字の'AAA'を指定しSELECTを実行します。

=> select * from test_a where c1='AAA';
 c1
-----
 AAA
(1 row)

## localeをja_JPに設定します。

=> \locale ja_JP
INFO 2567:  Canonical locale: 'ja_JP'
Standard collation: 'LJA'
Japanese (Japan)  日本語 (日本)

=> \locale
ja_JP

## 検索条件に半角かつ大文字の'AAA'を指定しSELECTを実行します。

=> select * from test_a where c1='AAA';
   c1
--------
 AAA
 AAA
(2 rows)

補足

本記事のlocaleとilike演算子を併用することで「全角・半角」と「大文字・小文字」の両方を区別せずに検索することも可能です。「大文字・小文字」を区別しない方法もご覧ください。

 「大文字・小文字」を区別しない方法
 https://www.ashisuto.co.jp/cm/analytics-database/nodistinction_upper_lower.html

参考情報

Override the Default Locale for a Session
Specify the Default Locale for the Database

検証バージョンについて

この記事の内容は、Vertica 12.0で確認しています。

更新履歴

2023/08/22 本記事を公開