使用PostgreSQL 8.1.11,有沒有辦法選擇一組名稱以相同前綴開頭的列。如何選擇名稱以相同前綴開頭的列?
假設我們有一個欄目:PREFIX_col1,PREFIX_col2,...
是否有可能做這樣的請求:
SELECT 'PREFIX_*' FROM mytable;
這當然是行不通的。
使用PostgreSQL 8.1.11,有沒有辦法選擇一組名稱以相同前綴開頭的列。如何選擇名稱以相同前綴開頭的列?
假設我們有一個欄目:PREFIX_col1,PREFIX_col2,...
是否有可能做這樣的請求:
SELECT 'PREFIX_*' FROM mytable;
這當然是行不通的。
你可以diff的初始子發現它在http://sourceforge.net/projects/pgdiff/
感謝您的迴應,但我不認爲這可能對我的問題有用。 – Toto 2010-10-15 12:36:49
對我來說,它看起來像the syntax description of PostgreSQL 8.x's SELECT statement不允許這樣。 SELECT列表必須是表達式或表達式列表,並且的語法似乎不允許通配部分列名稱。
分享和享受。
感謝您的回覆,看起來你是對的。對我來說太糟糕了:-( – Toto 2010-10-15 14:36:52
您將不得不用查詢構造查詢並使用EXECUTE。它更容易瓦特/ 8.3+。下面是將在8.1運行一個查詢和提取所有列從電影表開始R%
$$
DECLARE
qry TEXT;
BEGIN
SELECT 'SELECT ' || substr(cols, 2, length(cols) - 2) ||
' FROM film' INTO qry
FROM (
SELECT array(
SELECT quote_ident(column_name::text)
FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'film'
AND column_name LIKE 'r%'
ORDER BY ordinal_position
)::text cols
-- CAST text so we can just strip off {}s and have column list
) sub;
EXECUTE qry;
END;
$$
使用此:
select column_name from information_schema.COLUMNS as c where c.TABLE_NAME = 'table_name' and c.COLUMN_NAME like '%pattern%';
請理解,「僅限代碼」的答案是不鼓勵的 - 而是增加一點解釋,然後閱讀*格式化*您的輸入! – GhostCat 2017-07-25 12:48:11
你可能構造函數建立查詢,然後使用EXECUTE – Pointy 2010-10-15 14:22:43
好主意,我會探索這種方式。 – Toto 2010-10-15 14:38:52
*** 8.1 ***?真?你現在應該升級**。該版本早已得到不支持。順便說一句:你的表結構似乎表明你的表沒有正常化。你可能想考慮重新設計。 – 2012-09-20 11:04:58