PostgreSQL เทียบเท่ากับ ISNULL () คืออะไร


255

ใน MS SQL-Server ฉันสามารถทำได้:

SELECT ISNULL(Field,'Empty') from Table

แต่ใน PostgreSQL ฉันได้รับข้อผิดพลาดทางไวยากรณ์ ฉันจะเลียนแบบการISNULL()ทำงานได้อย่างไร


1
ไม่คุณไม่สามารถทำได้ใน MSSQL รหัสนั้นจะไม่คอมไพล์ ISNULLใช้เวลาสองข้อโต้แย้งและผลตอบแทนที่สองคือครั้งแรกคือnullมิฉะนั้นครั้งแรก
GSerg

@ GSerg คุณพูดถูก คงที่
Byron Whitlock

Gserg และ Byron ใช่คุณสามารถดูได้ที่นี่ตัวอย่างจากพีซีของฉันคือ isnull (a.FechaEntregada, '') เป็นการทดสอบจาก dbo.Amonestacion a msdn.microsoft.com/en-us/library/ms184325.aspx
Juan

คำตอบ:


453
SELECT CASE WHEN field IS NULL THEN 'Empty' ELSE field END AS field_alias

หรือมากกว่าสำนวน:

SELECT coalesce(field, 'Empty') AS field_alias

49
+1 coalesceสำหรับ (PS คุณสามารถทำเช่นนั้นใน MS SQL Server ได้เช่นกัน)
Alison R.

2
มีกรณีอื่น ๆ สำหรับการใช้ IS NULL ดังนั้นจึงเป็นการดีที่จะรู้ว่าทั้งสอง
Kyle Butt

30
ฉันคิดว่ามันคุ้มค่าที่จะสังเกตว่ามันอยู่coalesceในมาตรฐาน SQL โดยมีisnullฟังก์ชั่นเฉพาะ MS ที่เป็นหลักcoalesceมีเพียงสองพารามิเตอร์
GSerg

4
Coalesce () จัดการการส่งเสริมประเภทอย่างถูกต้อง (เหมือนที่ UNION SELECT ทำ) ในขณะที่ IsNull () ไม่
ErikE

2
มันมีค่าที่ชี้ให้เห็นว่า ISNULL และ COALESCE นั้นไม่เหมือนกัน IsNull บังคับให้ชนิดผลลัพธ์เป็นชนิดของอาร์กิวเมนต์ 1 ในขณะที่รวมกันใช้ชนิดที่เกี่ยวข้องสำหรับแต่ละอาร์กิวเมนต์ หากคุณเพียงแค่ค้นหาและแทนที่ isnull ด้วยการรวมตัวกันคุณอาจได้รับข้อผิดพลาดมากมาย ...
Stefan Steiger

76

ใช้COALESCE()แทน:

SELECT COALESCE(Field,'Empty') from Table;

มันทำหน้าที่เหมือนISNULLแต่มีฟังก์ชันการทำงานมากขึ้น Coalesce จะส่งคืนค่า non null แรกในรายการ ดังนั้น:

SELECT COALESCE(null, null, 5); 

ผลตอบแทน 5 ในขณะที่

SELECT COALESCE(null, 2, 5);

ส่งคืน 2

รวมตัวกันจะใช้เวลาเป็นจำนวนมากข้อโต้แย้ง ไม่มีเอกสารสูงสุด ฉันทดสอบมันจะ 100 ข้อโต้แย้งและมันก็ประสบความสำเร็จ สิ่งนี้ควรมีมากมายสำหรับสถานการณ์ส่วนใหญ่


24

ฉันจะเลียนแบบฟังก์ชัน ISNULL () ได้อย่างไร

SELECT (Field IS NULL) FROM ...

4
นี่เป็นการเลียนแบบการทำงานที่แน่นอนของ isnull แต่ไม่แน่ใจว่าทำไม downvote
smackshow

คำตอบที่ดีที่สุดสำหรับคำถามแน่นอน นิพจน์นี้เทียบเท่ากับ ISNULL () เต็ม COALESCE () ฉลาดและน่าสนใจมากที่รู้ แต่ไม่สามารถใช้ ISNULL () ในขณะที่ปิด
Skrol29

17
ฉันไม่ทราบว่าผู้ISNULLอ้างอิงถึงสิ่งที่คุณอ้างถึง แต่field IS NULLให้ค่าบูลีนในขณะที่ISNULLใน SQL Server ทำงานเช่นCOALESCE: มันส่งกลับหนึ่งในNULLค่าที่ไม่ใช่ คำตอบนี้ผิดอย่างมหันต์ ISNULLโปรดดูเอกสาร:
jpmc26

10
ฉันสงสัยว่าผู้แสดงความคิดเห็นเหล่านี้เป็นผู้ใช้ MySQL ที่ไม่ทราบว่าคำถามเริ่มต้นด้วย "ใน MS SQL Server, ... " MySQL มีฟังก์ชั่น ISNULL () ที่รับอาร์กิวเมนต์เพียงครั้งเดียวและส่งคืน 0 หรือ 1 รุ่น T-SQL สองข้อโต้แย้งและพฤติกรรมเช่น COALESCE หรือ NVL ของ Oracle
David Noha

1
greatvovan ไม่ว่าจะเป็นความตั้งใจของผู้โพสต์ดั้งเดิมหรือไม่ฉันเชื่อว่าสิ่งที่ผู้คนต้องการคือคำตอบของ "ฉันจะตรวจสอบได้อย่างไรว่าฟิลด์ใดเป็นโมฆะ" ไม่จำเป็นต้องมี "ฟังก์ชั่น ISNULL ทำงานอย่างไร" นั่นเป็นกรณีของฉันและคำตอบนี้เหมาะสำหรับสิ่งนั้น
ฟรีแมนเฮลมู ธ

15

ลอง:

SELECT COALESCE(NULLIF(field, ''), another_field) FROM table_name

3
นี่เป็นสิ่งที่ดีเนื่องจากครอบคลุมกรณีที่เมื่อเขตข้อมูลข้อความไม่เป็นโมฆะ แต่ยังว่างเปล่า
Soulia

-9

สร้างฟังก์ชั่นต่อไปนี้

CREATE OR REPLACE FUNCTION isnull(text, text) RETURNS text AS 'SELECT (CASE (SELECT $1 "
    "is null) WHEN true THEN $2 ELSE $1 END) AS RESULT' LANGUAGE 'sql'

และมันจะทำงาน

คุณอาจจะสร้างรุ่นที่แตกต่างกับประเภทพารามิเตอร์ที่แตกต่างกัน


28
ได้โปรดไม่มีใครทำเช่นนี้ ใช้ coalesce () แทนเพื่อ DBA ของคุณจะไม่เกลียดคุณ
จอร์แดน

1
postgres โปรดเพิ่ม isnull ดังนั้นจึงไม่มีใครเกลียดใครเลย
Eric Twilegar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.