زنگ

کسانی هستند که این خبر را قبل از شما می خوانند.
برای دریافت آخرین مقالات مشترک شوید.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید The Bell را بخوانید
بدون اسپم

سلام.
در ادامه در مورد انواع داده های بدوی ، اخیراً مورد بررسی قرار داده ایم و امروز در مورد آنها صحبت خواهیم کرد nULL را تایپ کنید.

نوع NULL به معنای واقعی کلمه است که می تواند فقط یک مقدار داشته باشد - مقدار "NULL".
NULL - برابر با مرجع خالی ، فضا یا نوع نامعین نیست.

هنگام کار با بانک اطلاعاتی (هنگام پیوستن به جداول) از آن برای تعیین مقدار گمشده هنگام کار با بانک اطلاعاتی استفاده می شود.
با اختصاص این مقدار به متغیر ، می توان مقدار NULL بدست آورد:
متغیر \u003d NULL.

مقادیر NULL در نتیجه اتصالات تشکیل می شوند که یک عنصر از یک جدول به طور مشروط یک عنصر متناظر از دیگری پیدا نکند. مقادیر NULL دارای ویژگی های خاصی است:
- مقایسه یک مقدار NULL با هر بحث دیگر همیشه نادرست است.

برای تعریف یک مقدار NULL ، از ساخت و ساز استفاده کنید NULL است.
برای تبدیل نوع NULL ، از این تابع استفاده کنید ISNULL (isNULL).

به منظور قطع زمینه های حاوی مقادیر NULL در نتیجه پرس و جو ، از سازه های زیر استفاده می شود: - NULL نیست - NULL نیست

نمونه هایی از

نمونه ای از بررسی مقدار برای NULL

دایرکتوری SELECT. نامگذاری نام ، مرجع نامگذاری قیمت خرید که در آن دایرکتوری. نامگذاری قیمت خرید NULL است

نمونه ای از عملکرد ISNULL ()
مقدار برگشتی تابع IS NULL () است: مقدار پارامتر اول ، اگر پارامتر اول دارای مقدار NULL نباشد ، در غیر این صورت مقدار پارامتر دوم است. اگر نوع پارامتر اول یک رشته یا یک عدد باشد ، پارامتر دوم به نوع پارامتر اول تبدیل می شود.

// مقدار مورد نظر را برای قسمت کمیت دریافت کنید. در صورت عدم وجود سوابق ، 0 را دریافت کنیدSELECT NULL است (تعداد (تعداد) ، 0) به عنوان مقدار از سند. عالی ترکیب بندی

با احترام ، برنامه نویس 1C.
نظرات خود را بگذارید ، من به نظر شما علاقه مند هستم

NULL چیزی بیش از هیچ ارزشی نیست. بسیاری از افراد آن را با مقدار "0" از شماره نوع ، یک مرجع خالی برای برخی از جسم یا با یک رشته خالی اشتباه می گیرند. بسیاری از خطاها ناشی از این تصور غلط است.

اگر درخواست شامل یک تماس با یک زمینه ، خاصیت یا پیوند شکسته شده باشد ، مقدار NULL ظاهر خواهد شد.

این مبتنی بر SQL است ، که اجازه نمی دهد برابری عادی NULL را بررسی کند. در زیر دو روش برای بررسی NULL در 1C 8.3 وجود دارد.

عملکرد زبان پرس و جو 1C 8.3 IS NULL () دارای دو پارامتر ورودی است:

  • عبارت مورد آزمایش قرار می گیرد.
  • بیان جایگزین

اگر مقدار آزمایش شده NULL باشد ، این تابع مقدار عبارت جایگزینی را برمی گرداند. اگر مقدار غیر NULL باشد ، پس خود عبارت بازگردانده می شود.

در زیر مثالی آورده شده است. این کلیه موارد نامگذاری بخش جدولی جدول را از سند "دریافت کالا و خدمات" انتخاب می کند. با کمک اتصال سمت چپ ، هر یک از کالاها با آخرین قیمت از ثبت اطلاعات مربوط به قیمت کالاها مهر می شوند.

در این حالت ممکن است شرایطی پیش بیاید که برای هر موقعیتی ممکن است به سادگی قیمتی در ثبت نباشد. در این حالت ، عملکرد ISNULL صفر معمول را برمی گرداند. اگر ما از آن استفاده نكنیم ، وقتی می خواهیم عملیات حسابی را در قسمت "Price" با مقدار NULL انجام دهیم ، خطایی دریافت خواهیم كرد.

انتخاب کنید

ISNULL وجود دارد (قیمت ها. قیمت ، 0) به عنوان واقعی
از



جایی که

در بیانیه SELELE وجود ندارد

آنالوگ ISNULL () IS NULL است که در عبارت SELECT استفاده می شود و اگر مقداری NULL است بررسی می کند. "IS" در این حالت به معنای برابری است و پرس و جو از مثال قبلی چنین است:

انتخاب کنید
Products.Nomenlature AS محصول ،
انتخاب
WHEN Price.Pry قیمت NULL است
پس از 0
قیمت های ELSE
پایان به عنوان واقعی
از
Document. کالاهای دریافتیخدمات.خدمات AS کالا
سمت چپ بپیوندید اختصاصی.قیمت های نامگذاری.مشخصترین قیمت های AS
Products Software.Nomenclature \u003d Price.Nomenlature
جایی که
Products.Link \u003d & پیوند به سند

تفاوت بین عملکرد IS NULL () و IS NULL است

همانطور که از نمونه های قبلی مشاهده می کنید ، در هر دو حالت پرس و جو داده های یکسانی را برمی گرداند. ISNULL () برای انتخاب SEENCT کوتاه است ... NULL است ... پایان ، اما هنوز به دلایل زیر ترجیح داده می شود:

  1. عملکرد ISNULL () پرس و جو را بهینه می کند. یک بار خوانده می شود ، بنابراین هنگام چک کردن یک عبارت پیچیده ، پرس و جو سریعتر پردازش می شود.
  2. عملکرد ISNULL () ساخت را کوتاه می کند ، و باعث می شود بیشتر پرس و جو خوانده شود.
  3. وقتی تابع ISNULL () اجرا شد ، عبارت جایگزین به نوع عبارت آزمایش شده برای انواع انواع رشته (به طول رشته) و عددی (به عرض بیت) ریخته می شود.

خالی - ارزش از دست رفته.
با صفر اشتباه گرفته نشود! NULL یک شماره نیست ، یک فضا نیست ، یک مرجع خالی ، نامشخص است.

NULL یک نوع تشکیل دهنده است ، یعنی یک نوع NULL و یک مقدار واحد از این نوع وجود دارد.

مقادیر NULL در شرایط زیر در یک پرس و جو ظاهر می شوند:
الف) پیوست خارجی که در آن هیچ سابقه متناظر در جدول دیگری یافت نشده است (با یک سمت چپ - در دوم ، با سمت راست - در اول با یک کامل - در هر دو)
ب) مراجعه به صفات عناصر برای یک گروه و برعکس.
ج) NULL در لیست زمینه های انتخاب (SELECT)
د) مراجعه به جزئیات لینک خراب شده

NULL استمورد استفاده در اپراتور SELECT (گویی که بررسی می کند مقدار خالی است (مقدار IS NULL است)):
کد 1C در برابر 8.x
انتخاب
هنگامی که ارزش NULL THEN باشد نتیجه NULL است
ارزش ELSE
پایان

مثالی دیگر:
کد 1C در مقابل 8.x SELECT

را انتخاب کنید هنگامی که مانده حسابداری نام حسابداری. مقدار موجودی این تعداد جمعاً 0 است
مانده حسابداری نامگذاری ELSE. مانده حساب به عنوان موجودی کمی
از



جایی که

تابع ISNULL (مقدار ، نتیجه (نتیجه) NULL) اگر پارامتر NULL نباشد مقدار پارامتر اول خود را بازگرداند و در غیر اینصورت مقدار پارامتر دوم آن را نشان می دهد
SELECT خراب است ... پایان ، اما NULL ارجح است.
کد 1C در برابر 8.x
انتخاب کنید
ISNULL (Directory.Nomenclature.Article، "---") به عنوان مقاله ،
Reference.Nomenclature. ارائه به عنوان نامگذاری

مثالی دیگر:
کد 1C در برابر 8.x
انتخاب کنید
دایرکتوری نامگذاری.
NULL است (نامگذاری حسابداری حسابداری و تعادل .QuantityBalance ، 0) AS QuantityBalance
از
دایرکتوری. نامگذاری دایرکتوری
ثبت نام جمع آوری سمت چپ. حساب کاربری نامگذاری.Balances AS AccountingNomllature
حسابداری نامگذاری نرم افزارBalances.Nomenclature \u003d فهرست نامی. لینک
جایی که
DirectoryNomenclature.ThisGroup \u003d FALSE
در این مثال ، تمام عناصر فهرست کالاها به دست می آیند ، پس از آن ، برای هر مورد ، مانده های جاری از ثبت انباشت بدست می آید. زیرا برای موردی که هیچ تعادل وجود ندارد ، جدول مجازی ترازوها یک رکورد را برنمی گردانند ، بنابراین در نتیجه اتصال در قسمت "NomenclatureAccountRemainst.Quantity" مقادیر NULL برای کالایی وجود خواهد داشت که هیچ تعادل وجود ندارد. برای اینکه مقدار 0 را به جای مقدار NULL در نتیجه پرس و جو بدست آوریم ، از تابع IS NULL () استفاده کردیم که تعویض مورد نظر را انجام می دهد.

NULL است به دلایل زیر با CHOICE متفاوت است:
الف) اگر NULL باشد ، پرس و جو بهتر خوانده می شود (ساده تر)
b) اگر IS NULL باشد ، اگر عبارتی پیچیده بررسی شود ، سریعتر عمل می کند ، زیرا یک بار ارزیابی می شود
c) اگر IS NULL باشد ، در صورت بیان نوع آزمایش شده از نوع String (طول) یا Number (عرض bit) است.

شما نمی توانید مقادیر NULL را با برابری عادی بررسی کنید ، زیرا منطق سه ارزش در SQL عمل می کند - True، False، NULL و نتیجه چنین مقایسه ای ناخوشایند خواهد بود ، که در 1C 8.0 شبیه به FALSE است.
خالی<> 0 ، بنابراین برای بیرونی سمت چپ می پیوندد Ref. نامگذاری با جداول مانده ها ، قیمت ها ، همتایان با تسویه حساب های متقابل ، در صورت عدم وجود چنین سوابق ، NULL وجود خواهد داشت که برابر با 0 نیست. بهترین راه حل NULL است.

هنگام کار با زبان پرس و جو ، گاهی اوقات وضعیتی به وجود می آید که شما نیاز دارید مقدار NULL را با مقدار دیگری جایگزین کنید. نیاز به چنین عملیاتی ممکن است بعنوان مثال هنگام دریافت مانده سهام برای کل کالا ایجاد شود. در این مقاله نحوه استفاده از عملکرد زبان query ISNULL () برای حل مشکلات مشابه توضیح داده شده است ، و همچنین راه حل های دیگر را نیز مورد بحث قرار می دهد.

عملکرد ISNULL

زبان پرس و جو تابع ISNULL () را پیاده سازی می کند ، هدف از آن جایگزین کردن عبارت با عبارت دیگری است اگر عبارت NULL باشد. نمودار نحو این عملکرد به شرح زیر است:

ISNULL (<Проверяемое выражение>, <Выражение замены>)

این تابع اگر پارامتر NULL نباشد و در غیر این صورت مقدار پارامتر اول را برگرداند.


انتخاب کنید
NULL است (نامگذاری حسابداری حسابداری و تعادل .QuantityBalance ، 0) AS QuantityBalance
از

جایی که

در این مثال ، تمام عناصر فهرست کالاها به دست می آیند ، پس از آن ، برای هر مورد ، مانده های جاری از ثبت انباشت بدست می آید. زیرا برای موردی که هیچ تعادل وجود ندارد ، جدول مجازی ترازوها یک رکورد را برنمی گردانند ، بنابراین در نتیجه اتصال در قسمت "NomenclatureAccountRemainst.Quantity" مقادیر NULL برای کالایی وجود خواهد داشت که هیچ تعادل وجود ندارد. برای اینکه مقدار 0 را به جای مقدار NULL در نتیجه پرس و جو بدست آوریم ، از تابع IS NULL () استفاده کردیم که تعویض مورد نظر را انجام می دهد.

با استفاده از عملیات SELECT

برای حل مشکلی که در ابتدا توضیح داده شده است ، می توانید از عملیات جستجوی زبان SELECT استفاده کنید. نمونه ای از نحوه پرس و جو شبیه به درخواست قبلی:


انتخاب کنید
دایرکتوری نامگذاری.
را انتخاب کنید هنگامی که مانده حسابداری نام حسابداری. مقدار موجودی این تعداد جمعاً 0 است
مانده حسابداری نامگذاری ELSE. مانده حساب به عنوان موجودی کمی
از
دایرکتوری. نامگذاری دایرکتوری
ثبت نام جمع آوری سمت چپ. حساب کاربری نامگذاری.Balances AS AccountingNomllature
حسابداری نامگذاری نرم افزارBalances.Nomenclature \u003d فهرست نامی. لینک
جایی که
DirectoryNomenclature.ThisGroup \u003d FALSE

نتیجه این پرس و جو با نتیجه پرس و جو در بخش قبلی یکسان خواهد بود.

عملکرد ISNULL () به دلایل زیر نسبت به عمل SELECT ارجحیت دارد: نوشتن با ISNULL () تا حدی فشرده تر است ، که باعث افزایش خوانایی پرس و جو می شود. علاوه بر این ، در شرایطی که بیان تست شده یک عملکرد پیچیده است ، از جمله یک تابع کل ، ارزیابی عملکرد ISNULL () می تواند سریعتر از آنالوگ نوشته شده با استفاده از عملکرد CHOICE باشد.

ویژگی های عملکرد ISNULL

تابع ISNULL () ، اگرچه با بررسی مقدار برای NULL مشابه عملیات SELECT است ، با این وجود تفاوت دارد. تفاوت در این است که اگر عبارت تابع دارای یک رشته یا عددی باشد ، آنگاه عبارت جایگزینی به نوع عبارت آزمایش شده تبدیل می شود.

بنابراین ، به عنوان مثال ، در موردی که عبارت آزمایش شده دارای نوع String (5) باشد و عبارت جایگزین دارای نوع String (10) باشد ، نوع نتیجه به نوع String (5) تبدیل می شود. در نتیجه ، هنگامی که تابع یک عبارت جایگزین را برمی گرداند ، مقدار آن به پنج حرف کوتاه می شود.

وضعیت با عبارات عددی مشابه است: مقدار عبارتی که تعویض می شود به نوع مورد آزمایش شده تبدیل می شود ، یعنی. عبارت جایگزین را می توان کوتاه کرد. اگر مقدار قابل تبدیل نباشد ، زبان پرس و جو با یک خطا پرس و جو را خاتمه می دهد. به عنوان مثال ، تلاش برای تبدیل شماره 1000 به نوع شماره (2) با یک خطا پایان می یابد.

زنگ

کسانی هستند که این خبر را قبل از شما می خوانند.
برای دریافت آخرین مقالات مشترک شوید.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید The Bell را بخوانید
بدون اسپم