■ はじめに
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