2010-10-15 58 views
-2

使用PostgreSQL 8.1.11,有沒有辦法選擇一組名稱以相同前綴開頭的列。如何選擇名稱以相同前綴開頭的列?

假設我們有一個欄目:PREFIX_col1,PREFIX_col2,...

是否有可能做這樣的請求:

SELECT 'PREFIX_*' FROM mytable; 

這當然是行不通的。

+0

你可能構造函數建立查詢,然後使用EXECUTE – Pointy 2010-10-15 14:22:43

+0

好主意,我會探索這種方式。 – Toto 2010-10-15 14:38:52

+0

*** 8.1 ***?真?你現在應該升級**。該版本早已得到不支持。順便說一句:你的表結構似乎表明你的表沒有正常化。你可能想考慮重新設計。 – 2012-09-20 11:04:58

回答

1

對我來說,它看起來像the syntax description of PostgreSQL 8.x's SELECT statement不允許這樣。 SELECT列表必須是表達式或表達式列表,並且的語法似乎不允許通配部分列名稱。

分享和享受。

+0

感謝您的回覆,看起來你是對的。對我來說太糟糕了:-( – Toto 2010-10-15 14:36:52

2

您將不得不用查詢構造查詢並使用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; 
$$ 
0

使用此:

select column_name from information_schema.COLUMNS as c where c.TABLE_NAME = 'table_name' and c.COLUMN_NAME like '%pattern%'; 
+1

請理解,「僅限代碼」的答案是不鼓勵的 - 而是增加一點解釋,然後閱讀*格式化*您的輸入! – GhostCat 2017-07-25 12:48:11

相關問題