我正在尋找一個SQL查詢(我使用的是Postgres數據庫),可以從逗號分隔單個記錄的所有值。如何編寫SQL查詢以獲得列明智的逗號分隔值列表從記錄
例如
我有一個表,名爲master_table且列沒有,姓名,電話
SELECT * FORM master_table WHERE id = 1
從上面查詢我想結果爲
1,piyush,1111111
2,john,2222222
上述表格例如只表是動態的,所以列號並且名稱不能修復。
在此先感謝
我正在尋找一個SQL查詢(我使用的是Postgres數據庫),可以從逗號分隔單個記錄的所有值。如何編寫SQL查詢以獲得列明智的逗號分隔值列表從記錄
例如
我有一個表,名爲master_table且列沒有,姓名,電話
SELECT * FORM master_table WHERE id = 1
從上面查詢我想結果爲
1,piyush,1111111
2,john,2222222
上述表格例如只表是動態的,所以列號並且名稱不能修復。
在此先感謝
SELECT (column_no::text || ',' || name || ',' || phone::text) AS comma_separated
FROM master_table WHERE id = 1
編輯:
您的評論後,我想你需要的功能。即使我不同意整個想法(在應用程序層中這樣做會好得多),下面是一個使你所問的問題的函數。這是醜陋的。
CREATE OR REPLACE FUNCTION GetCommaSeparatedValues(PAR_table text, PAR_where_clause text DEFAULT '') RETURNS TABLE (
comma_separated_values text
) AS $$
DECLARE
REC_columns record;
VAR_query text;
BEGIN
VAR_query := '';
FOR REC_columns IN SELECT column_name FROM information_schema.columns WHERE table_schema = current_schema AND table_name = PAR_table LOOP
IF VAR_query <> '' THEN
VAR_query := VAR_query || ' || '','' || ';
END IF;
VAR_query := VAR_query || ' CASE WHEN ' || REC_columns.column_name || ' IS NULL THEN ''null'' ELSE ' || REC_columns.column_name || '::text END';
END LOOP;
VAR_query := 'SELECT ' || VAR_query || ' FROM ' || PAR_table::regclass || ' ' || PAR_where_clause;
RETURN QUERY EXECUTE VAR_query;
END;
$$ LANGUAGE plpgsql;
用法:
SELECT * FROM GetCommaSeparatedValues('table1');
或
SELECT * FROM GetCommaSeparatedValues('table2', 'WHERE id = 1');
你好,謝謝你的回答,但在我的情況下,我需要這種價值爲不同的ta通過單個查詢來查詢。所以我不能決定列號或名稱。我將需要像遍歷列一樣的東西。 – compyutech
請舉個例子。您正在尋找一個查詢來獲得任何給定表中每個記錄的所有字段的逗號分隔值的字符串表示形式?一個pl/pgsql函數似乎是當時的方式。 – Eggplant
可以使用string_agg實現以上,爲前:
SELECT string_agg(id, ',') FROM table
Hello string_agg函數從單列中的不同記錄中提供逗號分隔值,其中我需要來自不同列的值 – compyutech
關於直接在SELECT
查詢上執行此操作的問題是,它會導致一些問題,主體是關於轉義。例如,如果你在一個記錄字符串中有一個逗號,你會如何處理?
當然,您可以解析字符串並將其轉義,但最常見的(推薦)方法是使用衆所周知的CSV格式。和PostgreSQL已經給你一個結果使用COPY
command這樣,所以你不必重新發明輪子:
COPY (SELECT * FROM master_table WHERE id = 1) TO stdout WITH CSV;
如果你想了解從psql的殼CSV格式的數據,只需修改一些psql的選項 你未對齊和對準的輸出模式
也可以在下面的命令
例
postgres=# select * from master_table;
id | string | number
----+--------+---------
1 | piyush | 1111111
2 | john | 2222222
(2 rows)
postgres=# \a
Output format is unaligned.
postgres=# \f ,
Field separator is ",".
postgres=# select * from master_table;
no,name,phone
1,piyush,1111111
2,john,2222222
(2 rows)
postgres=# \o result.csv
postgres=# select * from master_table; => query result is saved in 'result.csv'
postgres=#
請在這裏找到, http://stackoverflow.com/questions/14612394/query-for-comma-separated-ids-to-comma-separated-values –