簡體   English   中英

PostgreSQL刪除空字符串和空字符串之間的區別

[英]PostgreSql remove difference between null and empty string

我有這樣的查詢:

$stmt = $db->prepare("SELECT location.id FROM location WHERE location.city = :city AND location.country = :country");
$stmt->execute(array(':city' => $cityVar, ':country' => $countryVar));
$locationID = $stmt->fetchColumn();

我遇到了一個問題,因為在數據庫中,空的city列有時為null,有時為空字符串(我知道這是錯誤的,但是沒有辦法更改)。 當我的$cityVar變量是空的,我需要得到所需要的所有條目country ,但現在我得到的只有那些city列是空字符串(我不明白那些city為空)。

我想出的唯一解決方案是修改查詢本身,例如:

$sql = "SELECT location.id FROM location WHERE location.country = :country ";
if ($cityVar) { 
   $sql .= "AND location.city = :city ";
}

但我想知道是否還有更多合法的方法來解決這個問題。 注意:還有更多列,例如city ,需要搜索。

使用COALESCE(city, '') -將NULL字符串強制轉換為空字符串"" 如果您有很多城市並且對它們有很多查詢,則可以在合並字段上創建索引以促進搜索。

"SELECT location.id FROM location WHERE COALESCE(location.city, '') = :city "

暫無
暫無

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

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