簡體   English   中英

從表中選擇列名稱和值

[英]Select column name and value from table

如果我在PostgreSQL數據庫中具有下表:

Col1    Col2    Col3    

A       a       1       
B       b       2       

有沒有一種方法無需明確指定列名就可以獲取每個值的列名 即具有如下結果集:

Col1    A
Col1    B
Col2    a
Col2    b
Col3    1
Col3    2

當然,您可以編寫一個PL / pgSQL函數並自己查詢目錄表pg_attribute 但是,使用以下方法之一要容易得多:

JSON

函數row_to_json()提供了一半的功能。 與Postgres 9.2一起引入:

SELECT row_to_json(t, TRUE) FROM tbl t;

您根本不必提及列名,該函數從表類型派生它們。

-> SQLfiddle演示。

但是您將需要Postgres 9.3中的 json_each_text()進行所有操作:

SELECT json_each_text(row_to_json(t)) FROM tbl t;

要獲得顯示的排序順序,請執行以下操作:

SELECT (json_each_text(row_to_json(t))).*
FROM   tbl t
ORDER  BY 1, 2;

(尚不清楚您要如何精確排序。)
未經測試。 SQLfiddle還沒有提供Postgres 9.3。

hstore

但是,您可以對附加模塊hstore執行相同的操作 8.4起可用。 通過以下方式安裝一次:

CREATE EXTENSION hstore;

細節:
PostgreSQL中的鍵值對

查詢:

SELECT (each(hstore(t))).*
FROM   tbl t
ORDER  BY 1,2;

就這樣。
同樣,沒有SQLfiddle,因為無法在其中安裝其他模塊。

您可以在C#中從閱讀器獲取列名

string CONNECTION_QUERY = "SELECT * FROM FINANCE_PAYMENTS";
            SqlCommand comand = new SqlCommand(CONNECTION_QUERY,onnection);
            SqlDataReader reader = comand.ExecuteReader();

            while (reader.Read())
            {
                for (int i = 0; i < reader.FieldCount; i++)
                {
                    //this line will give you Column name and value
                    JO.Add(reader.GetName(i),reader[i].ToString());
                }
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM