Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのreplaceについてまとめています。replaceは指定した文字列を別の文字列に置換する関数ですが、DBMSによっては別の機能を持つSQLとして使われているケースもあります。

SQL replaceの構文

REPLACE(str,from_str,to_str)

以下は、employees(社員)テーブルのfirst_nameの「Georgi」を「Mr.Georgi」に置換する例です。1回目のSQLでemployeesテーブルをそのまま抽出し、2回めのSQLでemp_no、birth_dateと、first_nameをreplaceで置換した文字列を抽出しています。

mysql> select * from employees limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
|  10002 | 1964-06-02 | Bezalel    | Simmel    | F      | 1985-11-21 |
|  10003 | 1959-12-03 | Parto      | Bamford   | M      | 1986-08-28 |
|  10004 | 1954-05-01 | Chirstian  | Koblick   | M      | 1986-12-01 |
 :
 :

mysql> select emp_no, birth_date, replace(first_name, 'Georgi', 'Mr.Georgi')  from employees limit 10;
+--------+------------+--------------------------------------------+
| emp_no | birth_date | replace(first_name, 'Georgi', 'Mr.Georgi') |
+--------+------------+--------------------------------------------+
|  10001 | 1953-09-02 | Mr.Georgi                                  |
|  10002 | 1964-06-02 | Bezalel                                    |
|  10003 | 1959-12-03 | Parto                                      |
|  10004 | 1954-05-01 | Chirstian                                  |
|  10005 | 1955-01-21 | Kyoichi                                    |
|  10006 | 1953-04-20 | Anneke                                     |
|  10007 | 1957-05-23 | Tzvetan                                    |
|  10008 | 1958-02-19 | Saniya                                     |
|  10009 | 1952-04-19 | Sumant                                     |
|  10010 | 1963-06-01 | Duangkaew                                  |
+--------+------------+--------------------------------------------+
10 rows in set (0.00 sec)

【関連記事】
SQLのREPLACE関数を用いた置換機能 使用方法を徹底的に解説 

また、複数の文字列を置換したい場合は、replace関数を入れ子にするか、対象文字列が多い場合はcase式と組み合わせるとスッキリ記述できます。

mysql> select replace(replace('dog and cat', 'dog', 'mouse' ), 'cat', 'neko');
+-----------------------------------------------------------------+
| replace(replace('dog and cat', 'dog', 'mouse' ), 'cat', 'neko') |
+-----------------------------------------------------------------+
| mouse and neko                                                  |
+-----------------------------------------------------------------+
1 row in set (0.00 sec)

【関連記事】
SQLで文字列の置換をするにはreplace関数使用。 複数置換をするサンプルコード 

Oracleのreplaceの構文

以下はOracleのreplace関数使用の例です。「JACK and JOE」という文字列の「J」を「BL」に置換しています。

SELECT REPLACE('JACK and JUE','J','BL') "Changes"
     FROM DUAL;

Changes
--------------
BLACK and BLUE

関連)Oracle公式ドキュメント:REPLACE

SQL Serverのreplaceの構文

以下は、SQL Serverのreplace関数使用の例です。「abcdefghicde」の「cde」を「xxx」に置換しています。

SELECT REPLACE('abcdefghicde','cde','xxx');  
GO  
------------  
abxxxfghixxx  
(1 row(s) affected)  

関連)REPLACE (Transact-SQL) – SQL Server | Microsoft Docs

MySQLのreplaceの構文

以下は、MySQLのreplace関数の使用例です。

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
        -> 'WwWwWw.mysql.com'

関連)MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.5 文字列関数

また、MySQLにはREPLACE構文があり、レコードの挿入及び、重複レコード削除&挿入の機能があります。1回目のreplaceはinsert文と同じ動きをし、2回めのreplaceは重複データの削除とinsertを行います。

mysql> REPLACE INTO test VALUES (1, 'Old', '2014-08-20 18:47:00');
Query OK, 1 row affected (0.04 sec)

mysql> REPLACE INTO test VALUES (1, 'New', '2014-08-20 18:47:42');
Query OK, 2 rows affected (0.04 sec)

mysql> SELECT * FROM test; 
+----+------+---------------------+
| id | data | ts                  |
+----+------+---------------------+
|  1 | New  | 2014-08-20 18:47:42 |
+----+------+---------------------+
1 row in set (0.00 sec)

関連)MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.8 REPLACE 構文

PostgreSQLのreplaceの構文

PostgreSQLのrepalce関数の使用例です。

replace( 'abcdefabcdef', 'cd', 'XX')

PostgreSQLには、正規表現での置換に対応した、regexp_replace関数が使用可能です。

regexp_replace('Thomas', '.[mN]a.', 'M')

関連)PostgreSQL公式:文字列関数と演算子

まとめ

ポテパンダの一言メモ
  • replace関数は、指定のカラムや文字列を置換する関数
  • MySQLでは、replace関数とは全く別の機能を持つreplace文が用意されている
  • PostgreSQLでは、正規表現の置換が可能なregexp_replace関数が利用可能

 

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。