2010-02-06 25 views
191

, yapabileceğim ISNULL için PostgreSQL eşdeğer() Nedir: MS SQL-Server

SELECT ISNULL(Field,'Empty') from Table

Ama PostgreSQL içinde bir sözdizimi hatası alıyorum

. ISNULL() işlevini nasıl taklit edebilirim?

+1

sen MSSQL bunu yapamam yok. Bu kod derlenmeyecek. 'ISNULL' iki argüman alır ve ikinciyi döndürür, ilk 'null', aksi halde ilktir. – GSerg

+0

@GSerg, haklısınız. bunu düzeltdi. –

+0

GSerg ve Byron evet dbo.Amonestacion dan testi olarak benim PC'den burada Örnek SEÇ IsNull (a.FechaEntregada, '') görebileceğiniz bir https://msdn.microsoft.com/en-us/ "coalesce" için kitaplık/ms184325.aspx – Juan

cevap

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

Ya da daha deyimsel:

SELECT coalesce(field, 'Empty') AS field_alias 
+37

+1. (S.S. Bunu MS SQL Server'da da yapabilirsiniz.) –

+1

IS NULL kullanmak için başka durumlar da var, bu yüzden her ikisini de bilmek güzel. –

+26

Sanırım, SQL standardında 'coalesce', '' neyin '' sadece iki parametreyle esas olarak 'birleştirilmesi' olan bir MS'ye özgü fonksiyon olmasıyla ilgili olduğunu düşünüyorum. – GSerg

-7

şu fonksiyonu

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' 

oluştur Ve çalışacağız.

Farklı parametre türleri ile farklı sürümler oluşturabilirsiniz. yerine

+24

Lütfen, kimse bunu yapamaz. Bunun yerine coalesce() kullanın, böylece DBA’nız senden nefret etmiyor. – Jordan

58

Kullanım COALESCE(): Daha fazla işlevsellik sağlar rağmen

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

Bu ISNULL gibi çok çalışır. Coalesce listedeki ilk boş olmayan değeri döndürür. Böylece:

SELECT COALESCE(null, 2, 5); 

döner

2 Coalesce bağımsız değişken sayıda alacak iken

SELECT COALESCE(null, null, 5); 

döner 5. Belgelenen maksimum yoktur. 100 argüman test ettim ve başarılı oldu. Bu durumların büyük çoğunluğu için bol olmalı.

16

ISNULL() işlevselliğini nasıl taklit edebilirim?

SELECT (Field IS NULL) FROM ... 
+4

Bu, tam olarak niçin çalıştığını tam olarak öykünür, neden azalıyor – smackshow

+3

@artur Nasıl çalıştığını anlamıyorsunuz. – datashaman

+0

Soru için en iyi cevap, elbette. Bu ifade, ISNULL() öğesinin tam karşılığıdır. COALESCE() çok akıllı ve bilmesi ilginç ancak kapalıyken ISNULL() gerçekleştiremiyor. – Skrol29

10

Dene:

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

olmalıdır. Bu, bir metin alanı NULL değil, aynı zamanda 'boş' durumun söz konusu olduğu durumu kapsamaz. – soulia