1
0

More than 5 years have passed since last update.

[SQLite3]UPDATEで連結文字を値として使う方法

Last updated at Posted at 2019-07-04

やりたいこと

実施前の状態

テーブル名:city

field1 field2 field3 field4
北海道 札幌市中央区 NULL
北海道 札幌市中央区 旭ヶ丘
北海道 札幌市中央区 大通東
北海道 札幌市中央区 大通西
北海道 札幌市中央区 北一条東
北海道 札幌市中央区 北一条西

やりたいこと

field1~3の文字列を連結してfield4に入れる

完成予想

field1 field2 field3 field4
北海道 札幌市中央区 NULL 北海道札幌市中央区
北海道 札幌市中央区 旭ヶ丘 北海道札幌市中央区旭ヶ丘
北海道 札幌市中央区 大通東 北海道札幌市中央区大通東
北海道 札幌市中央区 大通西 北海道札幌市中央区大通西
北海道 札幌市中央区 北一条東 北海道札幌市中央区北一条東
北海道 札幌市中央区 北一条西 北海道札幌市中央区北一条西

とりあえず連結文字を取得する方法

SQLite3では||を入れることで連結可能

"abc"||"123"
=> abc123

今回はfield1~3を連結したいので

SELECT field1||field2||field3 FROM city;

連結文字を使ってUPDATE

通常のUPDATE基本文

UPDATE テーブル名 SET カラム =  WHERE 条件;

今までの流れから

UPDATE city SET field4 = (SELECT field1||field2||field3 FROM city);

(※全レコードで実施するので条件は付けなかった)

と考えてやってみたが失敗
何度かやってみてとりあえず成功した文はこっち

UPDATE city SET field4 = (SELECT field1||field2||field3)

カラムにNULLがあるときの対処

SQLiteでは値がNULLのときに別の値に置き換えてくれるifnullがある

SELECT ifnull(カラム1, 置き換え後の値)

今回の場合

UPDATE city SET field4 = (SELECT ifnull(field1,"")||ifnull(field2,"")||ifnull(field3,""))

これでやりたかったことは成功

思ったこと

  1. こんなことする人がいるのかな
  2. 調べても出てこなかったからいないのでは
  3. 適当に書いてるので他にあれば教えてください
  4. 説明が雑すぎて信用できないかも
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0