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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

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

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

Q&A

1回答

3397閲覧

PostgreSQLでカンマを含む文字列を置換し、SELECTで取得したい。

CAIN

総合スコア0

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

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

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

0グッド

0クリップ

投稿2022/04/18 08:44

編集2022/04/18 08:51

前提

PostgreSQLでカンマを含む文字列を置換し、SELECTで取得したいです。

■テーブル
USER

■カラム
・USER_ID(text)
・CD(text)

■データ
USER_ID CD
1    10000
2    10002
3    10003
4    10004
5    10005

■SQL
select
USER_ID
from
USER
where CD in (’10000'',''10002'',"10003" ,"10004","10005')

実現したいこと

取れてくるIN句の値が以下のようになっています。
where CD in (’10000'',''10002'',"10003" ,"10004","10005')
もしくは
where CD in (’10000,10002,10003 ,10004,10005')

→where CD in (’10000','10002',10003',10004',10005')
とIN句の中を変換しUSER_IDを取得したいです。

試したこと

select
USER_ID
from
USER
where CD in (select replace(’10000"','''',''))
のようなreplaceを用いるやり方を考えたのですが、置換の文字列に【,】が入ることでreplaceがきのうしませんでした。

上記のような文字列を置換して条件をかけ検索することはできないのでしょうか。
ご教示お願いいたします。

IN句の以下の部分は固定値で入ってきますので、この部分にエスケープ文字を入れること等はできません。
'10000'',''10002'',"10003" ,"10004","10005'
’10000,10002,10003 ,10004,10005'

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

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

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

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

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

nukasa

2022/04/18 08:51

SQLの問題ではなく、SQLを組み立てるプログラミング言語側の問題です。何のプログラミング言語で、何のフレームワークを使って、PostgreSQLにアクセスしようとしているのですか。
guest

回答1

0

仕様はおおよそ以下の通りで正しいでしょうか?

  • 検索したいコードがカンマ区切りの文字列として与えられるので、それを分割して検索したい
  • カンマ区切りの文字列には不要な文字として、シングルクォート(')やダブルクォート(")やスペース( )が含まれる。

正しいのであれば、以下のようなSQLで実現できそうです。

SELECT * FROM "USER" WHERE CD IN( SELECT TRANSLATE(token, '''" ', '') FROM UNNEST(STRING_TO_ARRAY('10000'',''10002'',"10003" ,"10004","10005', ',')) AS T(token) ); SELECT * FROM "USER" WHERE CD IN( SELECT TRANSLATE(token, '''" ', '') FROM UNNEST(STRING_TO_ARRAY('10000,10002,10003 ,10004,10005', ',')) AS T(token) );

投稿2022/04/18 09:50

neko_the_shadow

総合スコア2230

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問