質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

5807閲覧

苗字だけ取り出したいときの正規表現

midori_saki

総合スコア29

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2021/08/14 12:54

SQLで苗字だけを取りだしたいです。
名前は、安村 隆 のように、苗字と名前の間に半角スペースが入っています。

ネットで調べていくうちに、苗字だけ取り出しているコードが見つかり、

SELECT REGEXP_EXTRACT(name, r"^[^\s]+")

と記述してありました。

これで苗字が取り出せる理由があまり理解できなく、わかる方に教えていただきたいです。

どなたか、ご説明いただけますと幸いです。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/08/14 20:57

結構方言があるので想定の環境はバージョン含めて提示されたほうが良いです。
midori_saki

2021/08/15 00:32

すみませんでした。以後質問する際はバージョンも記載します。
guest

回答1

0

ベストアンサー

箇条書き気味に書いてみます。

  • ^[^\s]+^ + [^\s]+ に分割できます。
  • 先頭の^は、正規表現の「処理対象の先頭」を指します。
  • [^\s]+は、「[^\s]の1個以上」を指します。
  • [^\s]は、「[]の中に含まれているものの1個」を指します。例えば[ab]ならaかbを指します。
  • []内の^は「次の文字以外の何か」を指します。例えば[^a]ならa以外すべてを指します。
  • []内の\sは「空白文字」を指します。半角スペースなどが含まれます。
  • 上記2点を組み合わせると、[^\s]は「空白文字以外のすべて」を指します。

これらを組み立てた^[^\s]+は、「先頭から空白文字になってない文字すべて」を表します。

名前のデータが「姓 + 半角スペース + 名」ですべて揃っているのであれば、
^\sによって「先頭から半角スペース手前」までが正規表現の検索対象となり、結果として姓のみが抽出できます。

投稿2021/08/14 13:28

attakei

総合スコア2740

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

midori_saki

2021/08/15 00:34

attakeiさん、ご教示いただきありがとうございました。 わかりやすく解説していただき、理解が進みました。 ベストアンサーにさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問