2017-04-08 19 views
-1

私はそれを実行する組み込み関数について知っています。しかし、私はSQLを学び、これらの機能なしでこれをどうやって作るのかを理解したい。 I.私は次のコードを持っている:クエリ結果をテキスト変数に変換する方法は?

DECLARE @stmt VARCHAR; 
SELECT column_1 INTO @stmt FROM some_table; 

私は単一の文字列'value 1, value2, value 3, ..., value N'として@stmtで、それはすべての値を格納するためにこのコードを変更するにはどうすればよいですか?あなたがCOLUMN_1の異なる値をCONCATしたい場合

+1

?他の列。または、 'column1'の値が異なります – Utsav

+0

値は' column_1'の値です。私は今、 'FOR ... IN ... LOOP ... END LOOP; 'を使って解決策を見つけました。おそらく、別の解決策があります。 –

+0

あなたの質問の質を向上させるために、あなたが行った研究、あなたが試したこと、何が起こることが期待されているのか、実際に何が起こっているのかの証拠を表示してください。詳細はhttp://stackoverflow.com/help/how-to-askをご覧ください。 – toonice

答えて

2

、その後、いくつかの検索の後、この

SELECT string_agg(column_1,',') INTO @stmt FROM some_table; 
+0

集計やその他の関数を使わずにSQL演算子を使用してSQL演算子を作成する方法を尋ねました。 –

+0

よろしいですか?質問を正しく読まなかった。他の関数を使用せずにforのアプローチは正しいです。 – Utsav

+0

ありがとうございます。私は 'FOR '構造を使って作ろうとしています。もちろん、あなたのソリューションは正しいので、私は投票しました。私はこれらの機能を使用します。しかし、そのようなタスクの解決は、練習のように、より深い言語を得るのに役立ちます。 –

1

を使用し、私はそれを解決:

CREATE OR REPLACE FUNCTION get_table_names() RETURNS VARCHAR AS $$ 
DECLARE stmt VARCHAR; 
DECLARE temp_row RECORD; 
BEGIN 
    FOR temp_row IN (SELECT table_name FROM information_schema.tables) 
     LOOP 
      IF stmt IS NULL 
       THEN stmt := temp_row.table_name; 
       ELSE stmt := stmt || ',' || temp_row.table_name; 
      END IF; 
     END LOOP; 
    RETURN stmt; 
END; 
$$ LANGUAGE plpgsql; 

私はそれが最善であるとは思いません解決策は私の場合でも、私はよく見つけることができませんでした。


良く多くのソリューション: ` '値1、値2、値3、...、値N'`から来ている

CREATE OR REPLACE FUNCTION get_table_names() 
    RETURNS VARCHAR 
AS 
$$ 
    SELECT string_agg(table_name,',') 
    FROM information_schema.tables; 
$$ 
LANGUAGE sql; 
+0

これは、不必要に複雑で非効率的です。 information_schema.tablesから 'select string_agg(table_name、 '、')を使うことは、**多くの**良い解決策です。 –

関連する問題