我是新來的Postgres,動態查詢結果以HTML表格
我見過很多的SQL Server的解決方案(存儲過程,函數),它可以將查詢結果導出(不管查詢是什麼)到HTML表格。
我一直在嘗試在Postgres中做同樣的事情,但沒有找到一個簡單的方法。我需要一個帶查詢的函數作爲返回有效HTML代碼的參數。我正在尋找一個純粹的SQL解決方案。
我是新來的Postgres,動態查詢結果以HTML表格
我見過很多的SQL Server的解決方案(存儲過程,函數),它可以將查詢結果導出(不管查詢是什麼)到HTML表格。
我一直在嘗試在Postgres中做同樣的事情,但沒有找到一個簡單的方法。我需要一個帶查詢的函數作爲返回有效HTML代碼的參數。我正在尋找一個純粹的SQL解決方案。
的函數從查詢生成一個簡單的HTML表格:
create or replace function html_table (query text)
returns setof text language plpgsql as $$
declare
rec record;
header boolean := true;
begin
return next '<table>';
for rec in
execute format($q$
select row_to_json(q) json_row
from (%s) q
$q$, query)
loop
if header then
return query select
format ('<tr><th>%s</th></tr>', string_agg(key, '</th><th>'))
from json_each(rec.json_row);
header := false;
end if;
return query select
format ('<tr><td>%s</td></tr>', string_agg(value, '</td><td>'))
from json_each_text(rec.json_row);
end loop;
return next '</table>';
end $$;
實例:
create temp table test_data (id int, name text, amount int);
insert into test_data values
(1, 'Jim', 10),
(2, 'Ann', 20),
(3, 'Bob', 30);
select html_table('select * from test_data');
html_table
--------------------------------------------------
<table>
<tr><th>id</th><th>name</th><th>amount</th></tr>
<tr><td>1</td><td>Jim</td><td>10</td></tr>
<tr><td>2</td><td>Ann</td><td>20</td></tr>
<tr><td>3</td><td>Bob</td><td>30</td></tr>
</table>
(6 rows)
該函數使用json functionsrow_to_json()
,json_each_text()
和aggregate functionstring_agg()
其可以被組合以呈現行作爲列名稱和值列表,如下例所示:
select string_agg(key, ' - ') column_names, string_agg(value, ' - ') column_values
from test_data, json_each_text(row_to_json(test_data))
where id = 1;
column_names | column_values
--------------------+---------------
id - name - amount | 1 - Jim - 10
(1 row)
使用這種技術,您可以自由格式化動態執行的查詢產生的行。該功能可以很容易地通過添加html ID,類等來修改。
謝謝ALOT !!!這正是我需要的!並不期望得到答案,更多的是對解決方案的指導,謝謝! –
其中一種可能的解決方案是使用['query_to_xml'函數](https://www.postgresql.org/docs/current/static/functions-xml .html#FUNCTIONS-XML-MAPPING),然後使用XSLT轉換結果 – Abelisto
將問題標記爲過於寬泛是顯而易見的荒謬之處。 OP正在Postgres中尋找一個sql函數來從任何查詢生成一個HTML表格。你應該考慮給定的接受答案和OP的評論。 – klin
ha?廣泛?我敢打賭,還有其他人會發現這非常有幫助。感謝klin,希望網站管理員將刪除這個「擱置」狀態。 –