سؤال

هل هناك أي وظائف مكافئة NVL () في SQL؟

أو شيء قريب بما يكفي لاستخدامه بنفس الطريقة في سيناريوهات معينة؟


تحديث:
لا إذا كانت البيانات
لا توجد بيانات حالة
لا isnull
لا تتجمع

select nvl (purge_date,"SODIUFOSDIUFSDOIFUDSF") from id_rec where id=36581;


(expression)

SODIUFOSDIUFSDOIFUDSF

1 row(s) retrieved.

select isnull (purge_date,"SODIUFOSDIUFSDOIFUDSF") from id_rec where id=36581;

  674: Routine (isnull) can not be resolved.
Error in line 1
Near character position 8

select coalesce (purge_date,"SODIUFOSDIUFSDOIFUDSF") from id_rec where id=36581;

  674: Routine (coalesce) can not be resolved.
Error in line 1
Near character position 8

select decode(purge_date, NULL, "01/01/2009", purge_date) from id_rec where id=74115;

  800: Corresponding types must be compatible in CASE expression.
Error in line 1
Near character position 57
هل كانت مفيدة؟

المحلول

يبدو أنك تستخدم Informix.

Afaik ، هناك فك تشفير هناك:

DECODE(field, NULL, 'it is null, man', field) يجب أن يعطيك نفس النتيجة NVL(field, 'it is null, man')

يرجى نشر الاسم الدقيق وإصدار RDBMS الذي تستخدمه.

نصائح أخرى

باطل (لاستبدال واحد)

أو

تجميع (يعيد أول تعبير غير نول بين حججه.)

SQL Server: isnull أو coalescehttp://msdn.microsoft.com/en-us/library/ms184325.aspx

Sybase: وظيفة isnullhttp://infocenter.sybase.com/help/index.jsp؟topic=/com.sybase.help.ase_15.0.blocks/html/blocks/blocks162.htm

Postgres: لم أتمكن من العثور على واحدة على الرغم من عدم فحصها بالكامل. يقترح اختيار أين لاغية وبناء من هناhttp://archives.postgresql.org/pgsql-sql/1998-06/msg00142.php

DB2 - COALESCEhttp://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp؟topic=/com.ibm.db2.udb.doc/admin/r0000780.htm

المشكلة في بيان فك التشفير الذي يولد خطأ 800 بسيط. '01/01/2009' يتم التعامل معها كسلسلة ، وهي في الواقع الوسيطة الرابعة التي تولد الخطأ.

نقدر أن إدخال وإخراج عبارة Decode يمكن أن تكون أنواعًا مختلفة من البيانات ، وبالتالي فإن المحرك يتطلب منك أن تكون أكثر وضوحًا في هذه الحالة. (هل تريد purge_date يلقي كسلسلة أو السلسلة '01/01/2009', أم وسيطة السلسلة تم تحليلها كتاريخ أو التاريخ الأصلي؟ لا توجد وسيلة لمعرفة المحرك.

جرب هذا:

SELECT DECODE(purge_date, NULL, '01/01/2009'::DATE, purge_date)

يمكنك أيضًا كتابة هذه الوسيطة الثالثة على النحو التالي:

    DATE('01/01/2009')
    MDY(1,1,2009)

اعتمادا على الإصدار والتفضيل الشخصي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top