0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SQL 文末の全角スペースを削除

Posted at

環境

MSSQLSERVERのDB
Windows11

スペースは表示の都合上下記とします。
全角スペース:■
半角スペース:_

やりたいこと

品名文末の全角スペースを削除したい。

状況

品名データ 変更後
サンプル■■■■■■■■■■■■■■■■ サンプル
サン■プ■ル■■■■■■■■■■■■■■■■■■■■■■ サン■プ■ル
サン_プ■ル■■■■■■■_ サン_プ■ル
サンプ■■ル■■■_ サンプ■■ル
サ■ンプ■■ル■ サ■ンプ■■ル
  • 文末の全角スペース、半角スペースのみ除去したい。
  • 文中のスペースは保持したい。
  • 文末の全角スペースは1~22個まで可変
  • 半角スペースは時々含まれている

やったこと

  1. 全角スペース修正データ確認
  2. 修正方法調査
    • RTRIM関数:文末の半角スペース
    • REPLACE関数:全角スペース置換
  3. 難しい部分をよける
    • 品名文末全角スペース3個以上で抽出
  4. SELECTで試す
  5. UPDATEテスト
  6. 作業

調査ログ

【SQL】 RTRIM関数の使い方(右側の空白を削除する)
【SQL】文字列を置換して、データの更新を行う方法
【SQL】5分でわかるCASE式!SELECTもUPDATEも自在に条件分岐させよう

RTRIM
SELECT 文字列, RTRIM(文字列) FROM rtrim_db;
//半角スペース対応、全角スペース非対応
replace
replace(置換したいデータ, '置換前の文字', '置換後の文字')
case文
SELECT
  name,
  CASE
      WHEN name LIKE "%山%" THEN "山がつく"
      ELSE "山がつかない"
  END
FROM user;

SQL文

調査用
SELECT	[商品CD],	
		CASE
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■' THEN RTRIM(REPLACE([品名],'■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■' THEN RTRIM(REPLACE([品名],'■■■',''))
		WHEN RTRIM(品名) LIKE '%■■' THEN RTRIM(REPLACE([品名],'■■',''))
		WHEN RTRIM(品名) LIKE '%■' THEN RTRIM(REPLACE([品名],'■',''))
		END AS 品名
		
FROM 商品ファイル		
WHERE 品名 LIKE '%■■■'		

更新処理

本番用
UPDATE 商品ファイル		
SET 品名 = CASE
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■■' THEN RTRIM(REPLACE([品名],'■■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■■' THEN RTRIM(REPLACE([品名],'■■■■',''))
		WHEN RTRIM(品名) LIKE '%■■■' THEN RTRIM(REPLACE([品名],'■■■',''))
		WHEN RTRIM(品名) LIKE '%■■' THEN RTRIM(REPLACE([品名],'■■',''))
		WHEN RTRIM(品名) LIKE '%■' THEN RTRIM(REPLACE([品名],'■',''))
		END
WHERE 品名 LIKE '%■■■';		

おわりに

  • 文末全角スペース1個、2個は対象データ数件だったので個別(ゴリ押し)対応にしました。
  • 文中スペースを全角で保持しなくても良い場合なら一律半角スペースに置換してRTRIMでよさそう。
  • CASEの下2つは不要だった。
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?