【Snowflake】Snowflake ~ 囲み文字の除去 ~

■ はじめに

Snowflakeで管理しているテーブルのIDに「"123401"」のように
ダブルクォーテーションの囲み文字が混じっていた。

 除去したいし、そもそも、今更ながら、
シングル・ダブルクォーテーションの違いとか
あいまいだったので、その周辺の知識を調べてみた。

目次

【1】Snowflakeでのシングル・ダブルクォーテーションの違い
 1)シングルクォーテーション(一重引用符)
 2)ダブルクォーテーション(二重引用符)
【2】囲み文字の除去
 1)解決案1:TRIM

【1】Snowflakeでのシングル・ダブルクォーテーションの違い

 DB(PostgreSQL, MySQL etc)によって違うようだが、
Snowflakeでは、ちゃんと使い分けがある

1)シングルクォーテーション(一重引用符)

* 文字列定数(e.g. 'HelloWorld') を定義

https://docs.snowflake.com/ja/sql-reference/data-types-text

補足:シングルクォーテーションを入れたい場合

* 2つの隣接させて入力
(e.g. 'Today''s sales projections' -> Today's sales projections)

2)ダブルクォーテーション(二重引用符)

* 二重引用符で囲まれた識別子は
 大文字と小文字が区別されるものとして扱う

https://docs.snowflake.com/ja/sql-reference/identifiers-syntax
補足:ダブルクォーテーションを入れたい場合

* (やっぱり)2つの隣接させて入力
(e.g. 'Today""s sales projections' -> Today's sales projections)

【2】囲み文字の除去

1)解決案1:TRIM

* TRIM を使う(e.g. TRIM(id, '"'))

https://docs.snowflake.com/ja/sql-reference/functions/trim
構文

-- expr: 削除される文字列式
-- characters: 左右から削除する1つ以上の文字
TRIM( <expr> [, <characters> ] )

サンプル

CREATE TABLE member (
  id       VARCHAR(15),
  name     VARCHAR(50),
  gender     VARCHAR(1),
  country_code     VARCHAR(3),
  class    VARCHAR(10),
  updated_date    DATE
);

INSERT INTO member
 (id,name,gender,country_code,class,updated_date) VALUES
  ('"123401"','Mike','m','USA','bronze','2024-09-14'),
  ('"123402','Tom',NULL,'GBR','gold','2024-09-14'),
  ('123403"','Smith','f',NULL,'silver','2024-09-14'),
  ('""123404""','Ken',NULL,'JPN','gold','2024-09-14'),
  ('"""123405"""','Jack','m','UKR','gold','2024-09-14'),
  ('123"406','Henry','m','AUS','bronze','2024-09-14'),
  ('"123"407"','Sophia','f','JPN','platinum','2024-09-14'),
  ('123408','George','m','USA',NULL,'2024-09-14'),
  (NULL,'Lily','f','JPN','bronze','2024-09-14'),
  ('123410','Daisy','f','USA','platinum','2024-09-14')
;

SELECT TRIM(id, '"') AS result FROM member;
result
123401
123402
123403
123404
123405
123"406
123"407
123408
123410

使用上の注意
https://docs.snowflake.com/ja/sql-reference/functions/trim#usage-notes

* characters は、2文字指定した場合、それぞれで除去(例見た方が早い)

https://docs.snowflake.com/ja/sql-reference/functions/trim#examples

-- 文字列から先頭と末尾の ❄ および - 文字を削除
SELECT TRIM('❄-❄ABC-❄-', '❄-');

-------------------------+
 TRIM('❄-❄ABC-❄-', '❄-') |
-------------------------+
 ABC                     |
-------------------------+

関連記事

Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 入門編 / Hello world
https://dk521123.hatenablog.com/entry/2021/11/22/212520