以下のようなテーブルがあり、
id | job |
---|---|
1 | 【資格1】月給100,000円【資格2】月給105,000円+賞与 基本給2ヶ月分【資格3】月給120,000円+賞与 基本給2ヶ月分 手当…6,000円/月 |
このテーブルから、資格2の月給はいくらか、賞与はいくらかの情報のみを抜き出したいです。
可能でしょうか。よろしくお願いいたします。
回答4件
あなたの回答
tips
プレビュー
Prestoは、Facebook社がオープンソースで公開した分散処理基盤。Hive/Impalaと同じ分散SQLエンジンの一つです。それぞれのタスクが同時進行できる計算モデルを使用。中間データをメモリに持つため、タスク間のデータのやりとりが高速であることが特徴です。
PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。
SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。
Prestoは、Facebook社がオープンソースで公開した分散処理基盤。Hive/Impalaと同じ分散SQLエンジンの一つです。それぞれのタスクが同時進行できる計算モデルを使用。中間データをメモリに持つため、タスク間のデータのやりとりが高速であることが特徴です。
PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。
SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。
0グッド
0クリップ
投稿2018/11/06 08:58
以下のようなテーブルがあり、
id | job |
---|---|
1 | 【資格1】月給100,000円【資格2】月給105,000円+賞与 基本給2ヶ月分【資格3】月給120,000円+賞与 基本給2ヶ月分 手当…6,000円/月 |
このテーブルから、資格2の月給はいくらか、賞与はいくらかの情報のみを抜き出したいです。
可能でしょうか。よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
こんにちは!
saziさんのおっしゃる通り、正規表現(パターンマッチ)が使えます。
SQL
1select 2 job, 3 substring(job,'【資格2】月給([\d,]+)円') as 基本給, 4 substring(job,'【資格2】月給[\d,]+円+賞与 基本給(\dヶ月分)') as 賞与 5 from table
job | 基本給 | 賞与 |
---|---|---|
【資格1】月給100,000円【資格2】月給105,000円+賞与 基本給2ヶ月分【資格3】月給120,000円+賞与 基本給2ヶ月分 手当…6,000円/月 | 105,000 | 2ヶ月分 |
posglesqlのバージョンは9.3で確認しました。
投稿2018/11/07 01:07
編集2018/11/07 02:32総合スコア159
0
色々取り出し方は考えられます。(文字列関数と演算子)
「【資格2】と【資格3】に挟まれているもの」で抽出
SQL
1select 2 replace(replace(substring(job from search1 || '.+?' || search2), search1, ''), search2, '') -- 正規表現 3, substring(job, position(search1 in job)+length(search1), position(search2 in job)-position(search1 in job)-length(search2)) 4, split_part(split_part(job, search2, 1), search1, 2) 5from (values( 6 '【資格2】' 7 ,'【資格3】' 8 ,'【資格1】月給100,000円【資格2】月給105,000円+賞与 基本給2ヶ月分【資格3】月給120,000円+賞与 基本給2ヶ月分 手当…6,000円/月' 9 )) as test(search1,search2,job)
正規表現では直接抜き出しも表現で可能だと思いますが、得意ではないので。。。
投稿2018/11/06 12:37
編集2018/11/07 01:30総合スコア25430
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
賞与、ボーナス、複数の言い方がありそうな?
使い物になるシステムを作りたいなら、データベースの正規化 をきちんと理解した上でテーブルを設計しては?
投稿2018/11/06 09:18
総合スコア16419
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
これってSQLのやることではないのでは?
もしやるならそれなりのテーブルを組んでおく必要があると思います
今回はpostgreのご質問のようですがmysqlだとjson型のカラムを設定できますので
同じような処理がpostgreにもあるかもしれません。
SQL
1/* あくまでmysql */ 2create table tbl (id int,job json); 3insert into tbl values(1,'{"資格1":{"月給":"100,000円"},"資格2":{"月給":"105,000円","賞与":"基本給2ヶ月分"},"資格3":{"月給":"120,000円","賞与":"基本給2ヶ月分","手当":"6,000円/月"}}')
資格2の月給を調べる
SQL
1SELECT job->"$.\"資格2\".\"月給\"" FROM tbl
投稿2018/11/06 09:08
編集2018/11/06 09:42総合スコア118037
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。