在 PostgreSQL 中使用 Select 連線列

Bilal Shahid 2023年1月30日
  1. 在 PostgreSQL 中使用||連線 VARCHAR 型別的列的運算子
  2. 操縱 SELECT 操作以使用||當 PostgreSQL 中的列不是字串時
  3. 在 PostgreSQL 中使用 Typecast (:: 表示法) 進行連線
  4. 在 PostgreSQL 中使用 CAST(expression as type) 表示式
  5. 在 PostgreSQL 中使用簡單的 CONCAT(col1, col2) 操作
  6. 如果 PostgreSQL 中的一列是 NULL,則使用 COALESCE(variable, to_type) 進行連線
在 PostgreSQL 中使用 Select 連線列

PostgreSQL 是一個物件關聯式資料庫系統,這意味著它可以支援比它的競爭者 MySQL 更復雜的資料型別。

今天我們將學習使用 SELECT 操作連線表的列。

在 PostgreSQL 中使用||連線 VARCHAR 型別的列的運算子

現在,假設我們使用以下配置建立了一個表。

create table tab(
	id int not null,
	u_name varchar(50) not null,
	PRIMARY KEY (u_name)
);

然後我們繼續往裡面插入一些值。

insert into tab values(45, 'Jonathon'), (56, 'Mark'), (68, 'Angel');

最後,呼叫 SELECT 中的連線運算子進行顯示。

select id || u_name from tab

所以我們會得到如下輸出。

輸出:

使用連線運算子連線列

上面的查詢是如何工作的?我們使用|| Select 操作中的運算子。

||運算子在 PostgreSQL 文件中僅定義為連線字串。

因此,連線其中一列必須是 VARCHAR 資料型別的列並不困難,因為 VARCHAR 對應於 String

操縱 SELECT 操作以使用||當 PostgreSQL 中的列不是字串時

上面給出的 SELECT 查詢的一個非常簡單的修改可用於將任何其他資料型別的列連線在一起。

現在讓我們假設以下實現。

create table tab(
	id int not null,
	age int not null,
	PRIMARY KEY (id)
);
insert into tab values(45, 21), (56, 22), (68, 23)

現在我們知道兩列都是 int;因此,如果你嘗試這樣做。

select id || age from tab

它將返回一個錯誤。

輸出:

ERROR:  operator does not exist: integer || integer
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.

因此,這裡我們有兩個選擇:

  1. 在兩列之間連線一個 null STRING 並使其成為有效操作。
  2. 將型別轉換新增到列值之一。

要提供前一個選項,你所要做的就是將查詢更改為類似的內容。

select id ||''|| age from tab

這將返回連線所有相鄰列的兩個數字。它在兩個 int 列之間連線一個空字串;因此,該操作對該運算子有效,因為至少存在一個 String

在 PostgreSQL 中使用 Typecast (:: 表示法) 進行連線

要執行此操作,我們可以使用:

select id::text || age from tab

或者

select id|| age::text from tab

此型別將其中一列轉換為 Text 型別,使操作再次有效,因為現在存在一個 String

在史前 PostgreSQL 中,這種表示法通常用於將有效型別轉換為任何其他型別。

在 PostgreSQL 中使用 CAST(expression as type) 表示式

:: 符號以更好的對應物 CAST() 結尾。對於只看程式碼不知道::做什麼的初學者來說,它是有效且更容易理解的。

select CAST(id as varchar(50)) || age from tab

在 PostgreSQL 中使用簡單的 CONCAT(col1, col2) 操作

如果你不想進行任何轉換,請使你的程式碼儘可能簡單。你可以切換到連線和接受任何給定資料型別的 CONCAT() 函式。

select concat(id, age) from tab

如果 PostgreSQL 中的一列是 NULL,則使用 COALESCE(variable, to_type) 進行連線

如果變數為 null、0 或其他值,我們使用 COALESCE(variable, to_type),以便它保持有效並且不顯示 NULL

在我們的例子中,將我們的 NULL 列值轉換為有效的 String 型別,以便正確連線。

讓我們使用以下配置。

create table tab(
	id int not null,
	age int,
	PRIMARY KEY (id)
);

insert into tab values(45, 21), (56, NULL), (68, 23);

我們為表中的第二組值插入了一個 NULL

如果我們現在執行此操作。

select id::text || age from tab;

它將返回:

輸出:

使用 COALESCE

所以我們可以在這裡呼叫 COALESCE()

select coalesce(id, 0)::text || coalesce(age, 0) from tab;

這往往會返回正確的輸出,現在將 NULL 值替換為 0。

作者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

相關文章 - PostgreSQL Column