مكافئ SQL NVL - بدون/بيانات الحالة و isnull & coalesce
سؤال
هل هناك أي وظائف مكافئة 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)
اعتمادا على الإصدار والتفضيل الشخصي.