ค่า Null (มีค่า null และมีค่า null ()) ค่า null (มีค่า null และมีค่า null ()) มี null ในคำขอ 1c
โมฆะ- ค่าที่หายไป
เพื่อไม่ให้สับสนกับโมฆะ! NULL ไม่ใช่ตัวเลข ไม่เท่ากับช่องว่าง การอ้างอิงที่ว่างเปล่า ไม่ได้กำหนด
NULL คือค่าที่สร้างประเภท เช่น มีประเภท NULL และค่าเดียวของประเภทนี้
ค่า NULL จะปรากฏในแบบสอบถามในสถานการณ์ต่อไปนี้:
ก) การรวมภายนอกซึ่งไม่พบระเบียนที่เกี่ยวข้องในตารางอื่น (โดยด้านซ้าย - ในที่สองโดยด้านขวา - ในครั้งแรกโดยมีรายการเต็ม - ในทั้งสอง)
b) อ้างถึงคุณลักษณะขององค์ประกอบสำหรับกลุ่มและในทางกลับกัน
c) NULL ในรายการฟิลด์การเลือก (SELECT)
ง) อ้างอิงถึงรายละเอียดของลิงค์เสีย
เป็นโมฆะใช้ในโอเปอเรเตอร์ SELECT (ราวกับว่ากำลังตรวจสอบว่าค่าว่าง (Value IS NULL)):
รหัส 1C v 8.x
ทางเลือก
เมื่อค่าเป็น NULL ผลลัพธ์จะเป็น NULL
ค่าอื่น
ตอนจบ
ตัวอย่างอื่น:
รหัส 1C v 8.x SELECT
เลือกเมื่อ Nomenclature การบัญชี ยอดดุลยอดเงินคงเหลือเป็น NULL แล้ว 0
ELSE Nomenclature การบัญชี Balances.Quantity Balance AS ปริมาณ Balance
จาก
ที่ไหน
การทำงาน ISNULL (ค่า, ResultIf NULL)ส่งกลับค่าของพารามิเตอร์ตัวแรกถ้าไม่ใช่ NULL และค่าของพารามิเตอร์ตัวที่สองเป็นอย่างอื่น
เป็น SELECT ... END ที่ยุบแล้ว แต่แนะนำให้ใช้ IS NULL
รหัส 1C v 8.x
เลือก
ISNULL (Directory.Nomenclature.Article, "---") AS Article,
Reference.Nomenclature.Presentation AS Nomenclature
ตัวอย่างอื่น:
รหัส 1C v 8.x
เลือก
ไดเรกทอรีของการตั้งชื่อ
เป็นโมฆะ (NomenclatureAccountingBalance.QuantityRemainment, 0) เป็นจำนวนที่เหลือ
จาก
Directory.Nomenclature AS Directory
ซ้ายเข้าร่วม สะสม Register.AccountingNomenclature.Balances AS AccountingNomenclatureBalance
ซอฟต์แวร์ NomenclatureAccountingBalances.Nomenclature = Nomenclature Directory.Link
ที่ไหน
DirectoryNomenclature.ThisGroup = FALSE
วี ตัวอย่างนี้ได้รับองค์ประกอบทั้งหมดของรายการหุ้น หลังจากนั้นสำหรับแต่ละหุ้น ยอดคงเหลือปัจจุบันจะได้รับจากการลงทะเบียนการสะสม เพราะ สำหรับรายการที่ไม่มียอดดุล ตารางเสมือนของยอดดุลจะไม่ส่งกลับรายการบันทึก จากนั้น การเชื่อมต่อในช่อง "NomenclatureAccountRemains.Quantity" จะมีค่า NULL สำหรับรายการที่มี ไม่มียอดคงเหลือ เพื่อให้มีค่า 0 แทนที่จะเป็นค่า NULL ในผลลัพธ์การสืบค้น เราใช้ฟังก์ชัน IS NULL () ซึ่งจะทำการเปลี่ยนค่าที่ต้องการ
เป็นโมฆะแตกต่างจาก CHOICE ด้วยเหตุผลดังต่อไปนี้:
ก) หากเป็นโมฆะ แบบสอบถามจะอ่านได้ดีกว่า (ง่ายกว่า)
b) ถ้า IS NULL ถ้าตรวจสอบนิพจน์ที่ซับซ้อน นิพจน์จะทำงานเร็วขึ้น เนื่องจากจะมีการประเมินหนึ่งครั้ง
c) ถ้า IS NULL นิพจน์แทนที่จะถูกแปลงเป็นประเภทของนิพจน์ที่ทดสอบ ถ้าเป็นประเภทสตริง (ความยาว) หรือตัวเลข (ความกว้างบิต)
คุณไม่สามารถตรวจสอบค่า NULL ด้วยความเท่าเทียมกันทั่วไปได้ เนื่องจากตรรกะสามค่าทำงานใน SQL - True, False, NULL และผลลัพธ์ของการเปรียบเทียบจะเป็น UNKNOWN ซึ่งใน 1C 8.0 จะคล้ายกับ FALSE
โมฆะ<>0 ดังนั้นสำหรับผู้อ้างอิงด้านซ้ายภายนอก ระบบการตั้งชื่อพร้อมตารางยอดคงเหลือ ราคา คู่สัญญาที่มีการตั้งถิ่นฐานร่วมกัน หากไม่มีบันทึกดังกล่าว จะมีค่า NULL ซึ่งไม่เท่ากับ 0 ทางออกที่ดีที่สุด- เป็นโมฆะ
เมื่อทำงานกับภาษาคิวรี บางครั้งสถานการณ์ก็เกิดขึ้นเมื่อคุณต้องการแทนที่ค่า NULL ด้วยค่าอื่น ความจำเป็นในการดำเนินการดังกล่าวอาจเกิดขึ้น ตัวอย่างเช่น เมื่อได้รับยอดคงเหลือในสต็อคสำหรับสินค้าทั้งหมด บทความนี้อธิบายวิธีใช้ฟังก์ชันภาษาคิวรี ISNULL () เพื่อแก้ปัญหาที่คล้ายคลึงกัน และยังกล่าวถึงวิธีแก้ไขปัญหาอื่นๆ
ฟังก์ชัน ISNULL
ฟังก์ชัน ISNULL () ถูกนำมาใช้ในภาษาของแบบสอบถาม ซึ่งมีจุดประสงค์เพื่อแทนที่นิพจน์ด้วยนิพจน์อื่น หากนิพจน์นั้นเป็น NULL ไดอะแกรมไวยากรณ์สำหรับฟังก์ชันนี้มีลักษณะดังนี้:
ISNULL (<Проверяемое выражение>, <Выражение замены>)
ฟังก์ชั่นนี้จะคืนค่าของพารามิเตอร์ตัวแรกหากไม่ใช่ NULL และคืนค่าของนิพจน์ที่สอง
เลือก
เป็นโมฆะ (NomenclatureAccountingBalance.QuantityRemainment, 0) เป็นจำนวนที่เหลือ
จาก
ที่ไหน
ในตัวอย่างนี้ ได้รับองค์ประกอบทั้งหมดของแค็ตตาล็อกไอเท็ม หลังจากนั้นสำหรับแต่ละรายการ ยอดคงเหลือปัจจุบันจะได้รับจากการลงทะเบียนการสะสม เพราะ สำหรับรายการที่ไม่มียอดดุล ตารางเสมือนของยอดดุลจะไม่ส่งกลับรายการบันทึก จากนั้น การเชื่อมต่อในช่อง "NomenclatureAccountRemains.Quantity" จะมีค่า NULL สำหรับรายการที่มี ไม่มียอดคงเหลือ เพื่อให้มีค่า 0 แทนที่จะเป็นค่า NULL ในผลลัพธ์การสืบค้น เราใช้ฟังก์ชัน IS NULL () ซึ่งจะทำการเปลี่ยนค่าที่ต้องการ
การใช้การดำเนินการ SELECT
ในการแก้ปัญหาที่อธิบายไว้ก่อนหน้านี้ คุณสามารถใช้การดำเนินการภาษาแบบสอบถาม SELECT ตัวอย่างของข้อความค้นหาที่คล้ายกับก่อนหน้านี้จะมีลักษณะดังนี้:
เลือก
ไดเรกทอรีของการตั้งชื่อ
เลือกเมื่อ Nomenclature การบัญชี ยอดดุลยอดเงินคงเหลือเป็น NULL แล้ว 0
ELSE Nomenclature การบัญชี Balances.Quantity Balance AS ปริมาณ Balance
จาก
Directory.Nomenclature AS Directory
ซ้ายเข้าร่วม สะสม Register.AccountingNomenclature.Balances AS AccountingNomenclatureBalance
ซอฟต์แวร์ NomenclatureAccountingBalances.Nomenclature = Nomenclature Directory.Link
ที่ไหน
DirectoryNomenclature.ThisGroup = FALSE
ผลลัพธ์ของแบบสอบถามนี้จะเหมือนกับผลลัพธ์ของแบบสอบถามที่ให้ไว้ในส่วนก่อนหน้า
การใช้ฟังก์ชัน ISNULL () นั้นดีกว่าการใช้การดำเนินการ SELECT ด้วยเหตุผลดังต่อไปนี้: การเขียนด้วย ISNULL () นั้นค่อนข้างกระชับกว่า ซึ่งช่วยเพิ่มความสามารถในการอ่านของคิวรี นอกจากนี้ ในกรณีที่นิพจน์ที่ทดสอบเป็นฟังก์ชันที่ซับซ้อน ซึ่งรวมถึงฟังก์ชันการรวม การประเมินฟังก์ชัน ISNULL () อาจเร็วกว่าแบบอะนาล็อกที่เขียนโดยใช้ฟังก์ชัน CHOICE
คุณสมบัติของฟังก์ชัน ISNULL
ฟังก์ชัน ISNULL () แม้ว่าจะคล้ายกับการดำเนินการ SELECT ด้วยการตรวจสอบค่า NULL แต่ก็มีความแตกต่างกัน ข้อแตกต่างคือ หากนิพจน์ฟังก์ชันมีสตริงหรือประเภทตัวเลข นิพจน์การแทนที่จะถูกแปลงเป็นประเภทของนิพจน์ที่ทดสอบ
ตัวอย่างเช่น ในกรณีที่นิพจน์ที่ทดสอบมีประเภท String (5) และนิพจน์การแทนที่มีประเภท String (10) ประเภทผลลัพธ์จะถูกแปลงเป็นประเภท String (5) ด้วยเหตุนี้ เมื่อฟังก์ชันส่งกลับนิพจน์การแทนที่ ค่าจะถูกตัดให้เหลือห้าอักขระ
สำหรับนิพจน์ตัวเลข สถานการณ์จะคล้ายกัน: ค่าของนิพจน์ที่ถูกแทนที่จะถูกแปลงเป็นประเภทของนิพจน์ที่ทดสอบ นั่นคือ นิพจน์ที่จะแทนที่สามารถตัดทอนได้ หากไม่สามารถแปลงค่าได้ ภาษาของคิวรีจะยุติการสืบค้นโดยมีข้อผิดพลาด ตัวอย่างเช่น ความพยายามในการแปลงตัวเลข 1000 เป็นประเภท Number (2) จะจบลงด้วยข้อผิดพลาด
สวัสดี.
ต่อเกี่ยวกับประเภทข้อมูลดั้งเดิม เราได้พิจารณาเมื่อเร็ว ๆ นี้ และวันนี้เราจะพูดถึง พิมพ์ NULL.
ประเภท NULL เป็นตัวอักษรที่สามารถมีค่าได้เพียงค่าเดียว ซึ่งก็คือค่า "NULL"
NULL - ไม่เท่ากับการอ้างอิงว่าง ช่องว่าง หรือประเภทที่ไม่ได้กำหนด
ใช้เมื่อทำงานกับฐานข้อมูล (เมื่อเข้าร่วมตาราง) ใช้เพื่อกำหนดค่าที่ขาดหายไปเมื่อทำงานกับฐานข้อมูล
ค่า NULL สามารถรับได้โดยการกำหนดค่านี้ให้กับตัวแปร:
ตัวแปร = NULL
ค่า NULL เกิดขึ้นจากการรวมเมื่อองค์ประกอบจากตารางหนึ่งไม่พบองค์ประกอบที่สอดคล้องกันจากอีกตารางหนึ่งตามเงื่อนไข ค่า NULL มีคุณสมบัติเฉพาะ:
- การเปรียบเทียบค่า NULL กับอาร์กิวเมนต์อื่นๆ จะคืนค่าเป็นเท็จเสมอ
ในการกำหนดค่า NULL ให้ใช้โครงสร้าง เป็นโมฆะ.
ในการแปลงประเภท NULL ให้ใช้ฟังก์ชัน ISNULL (เป็นโมฆะ).
เพื่อตัดฟิลด์ที่มีค่า NULL อันเป็นผลมาจากแบบสอบถาม มีการใช้โครงสร้างต่อไปนี้: - ไม่ใช่ NULL - ไม่ใช่ NULL
ตัวอย่างของ
ตัวอย่างการตรวจสอบค่า NULL
เลือกไดเร็กทอรี การตั้งชื่อ ชื่อ, อ้างอิง. การตั้งชื่อ ราคาซื้อ WHERE Directory การตั้งชื่อ ราคาซื้อเป็นโมฆะ
ตัวอย่างฟังก์ชัน ISNULL ()
ค่าที่ส่งกลับของฟังก์ชัน IS NULL (): ค่าของพารามิเตอร์ตัวแรก หากพารามิเตอร์แรกไม่มีค่า NULL มิฉะนั้น ค่าของพารามิเตอร์ตัวที่สอง พารามิเตอร์ที่สองจะถูกแปลงเป็นชนิดของพารามิเตอร์แรก ถ้าชนิดของพารามิเตอร์แรกเป็นสตริงหรือตัวเลข
ขอแสดงความนับถือ 1C โปรแกรมเมอร์
แสดงความคิดเห็นของคุณ ฉันสนใจความคิดเห็นของคุณ
โมฆะ- ค่าที่หายไป
เพื่อไม่ให้สับสนกับโมฆะ! NULL ไม่ใช่ตัวเลข ไม่เท่ากับช่องว่าง การอ้างอิงที่ว่างเปล่า ไม่ได้กำหนด
NULL คือค่าที่สร้างประเภท เช่น มีประเภท NULL และค่าเดียวของประเภทนี้
ค่า NULL จะปรากฏในแบบสอบถามในสถานการณ์ต่อไปนี้:
ก) การรวมภายนอกซึ่งไม่พบบันทึกที่สอดคล้องกันในตารางอื่น (โดยที่ด้านซ้าย - ในอันที่สอง ด้านขวา - ในอันแรก อันแบบเต็ม - ทั้งสองอัน)
b) อ้างถึงคุณลักษณะขององค์ประกอบสำหรับกลุ่มและในทางกลับกัน
c) NULL ในรายการฟิลด์การเลือก (SELECT)
ง) อ้างอิงถึงรายละเอียดของลิงค์เสีย
เป็นโมฆะใช้ในโอเปอเรเตอร์ SELECT (ราวกับว่ากำลังตรวจสอบว่าค่าว่าง (Value IS NULL)):
รหัส 1C v 8.x
ทางเลือก
เมื่อค่าเป็น NULL ผลลัพธ์จะเป็น NULL
ค่าอื่น
ตอนจบ
ตัวอย่างอื่น:
รหัส 1C v 8.x SELECT
เลือกเมื่อ Nomenclature การบัญชี ยอดดุลยอดเงินคงเหลือเป็น NULL แล้ว 0
ELSE Nomenclature การบัญชี Balances.Quantity Balance AS ปริมาณ Balance
จาก
ที่ไหน
การทำงาน ISNULL (ค่า, ResultIf NULL)ส่งกลับค่าของพารามิเตอร์ตัวแรกถ้าไม่ใช่ NULL และค่าของพารามิเตอร์ตัวที่สองเป็นอย่างอื่น
เป็น SELECT ... END ที่ยุบแล้ว แต่แนะนำให้ใช้ IS NULL
รหัส 1C v 8.x
เลือก
ISNULL (Directory.Nomenclature.Article, "---") AS Article,
Reference.Nomenclature.Presentation AS Nomenclature
ตัวอย่างอื่น:
รหัส 1C v 8.x
เลือก
ไดเรกทอรีของการตั้งชื่อ
เป็นโมฆะ (NomenclatureAccountingBalance.QuantityRemainment, 0) เป็นจำนวนที่เหลือ
จาก
Directory.Nomenclature AS Directory
ซ้ายเข้าร่วม สะสม Register.AccountingNomenclature.Balances AS AccountingNomenclatureBalance
ซอฟต์แวร์ NomenclatureAccountingBalances.Nomenclature = Nomenclature Directory.Link
ที่ไหน
DirectoryNomenclature.ThisGroup = FALSE
ในตัวอย่างนี้ ได้รับองค์ประกอบทั้งหมดของแค็ตตาล็อกไอเท็ม หลังจากนั้นสำหรับแต่ละรายการ ยอดคงเหลือปัจจุบันจะได้รับจากการลงทะเบียนการสะสม เพราะ สำหรับรายการที่ไม่มียอดดุล ตารางเสมือนของยอดดุลจะไม่ส่งกลับรายการบันทึก จากนั้น การเชื่อมต่อในช่อง "NomenclatureAccountRemains.Quantity" จะมีค่า NULL สำหรับรายการที่มี ไม่มียอดคงเหลือ เพื่อให้มีค่า 0 แทนที่จะเป็นค่า NULL ในผลลัพธ์การสืบค้น เราใช้ฟังก์ชัน IS NULL () ซึ่งจะทำการเปลี่ยนค่าที่ต้องการ
เป็นโมฆะแตกต่างจาก CHOICE ด้วยเหตุผลดังต่อไปนี้:
ก) หากเป็นโมฆะ แบบสอบถามจะอ่านได้ดีกว่า (ง่ายกว่า)
b) ถ้า IS NULL ถ้าตรวจสอบนิพจน์ที่ซับซ้อน นิพจน์จะทำงานเร็วขึ้น เนื่องจากมีการประเมินหนึ่งครั้ง
c) ถ้า IS NULL นิพจน์แทนที่จะถูกแปลงเป็นประเภทของนิพจน์ที่ทดสอบ ถ้าเป็นประเภทสตริง (ความยาว) หรือตัวเลข (ความกว้างบิต)
คุณไม่สามารถตรวจสอบค่า NULL ด้วยความเท่าเทียมกันทั่วไปได้ เนื่องจากตรรกะสามค่าทำงานใน SQL - True, False, NULL และผลลัพธ์ของการเปรียบเทียบจะเป็น UNKNOWN ซึ่งใน 1C 8.0 จะคล้ายกับ FALSE
โมฆะ<>0 ดังนั้นสำหรับผู้อ้างอิงด้านซ้ายภายนอก ระบบการตั้งชื่อพร้อมตารางยอดคงเหลือ ราคา คู่สัญญาที่มีการตั้งถิ่นฐานร่วมกัน หากไม่มีบันทึกดังกล่าว จะมีค่า NULL ซึ่งไม่เท่ากับ 0 ทางออกที่ดีที่สุดคือ IS NULL
27.06.2017
NULL, IS NULL () และ IS NULL ในคำขอ 1C
NULL .คืออะไร
โมฆะผลลัพธ์ของคำขอ หมายความว่าไม่มีค่า (นี่ไม่ใช่ค่าว่าง ไม่ใช่ null ไม่ใช่การอ้างอิง null)ตัวอย่างเช่น จากการเข้าร่วมตารางแบบสอบถาม ไม่พบค่าใดค่าหนึ่งในตารางเมื่อเชื่อมโยงโดยเขตข้อมูลเข้าร่วม หรือคำขออ้างถึงแอตทริบิวต์ที่ไม่มีอยู่จริง (คุณสมบัติ)
NULL ไม่เท่ากับ NULL!
หากในแบบสอบถาม 1C คุณต้องการกำหนดการเลือก (เงื่อนไข) ด้วยการตรวจสอบ NULL การสร้างแบบฟอร์ม "WHERE VT. Field1 = NULL" จะส่งกลับเสมอ โกหก! ในการตรวจสอบ ให้ใช้ตัวดำเนินการพิเศษคำขอ 1C มีค่าเป็นโมฆะ
ในการตรวจสอบค่า (หรือทำงานกับค่า) สำหรับ NULL คุณต้องใช้โครงสร้างต่อไปนี้ "WHERE VT. Field1 IS NULL" หรือตัวอย่างอื่นใช้ในการก่อสร้าง ทางเลือก"CHOICE | WHEN VT.Field1 IS NULL | THEN" เป็นที่น่าสังเกตว่าฟังก์ชันการตรวจสอบฟิลด์สำหรับ NULL เป็นหนึ่งในการใช้ทรัพยากรมากในการสืบค้น 1C ดังนั้น หากคุณต้องการใช้ในเงื่อนไขการสืบค้น ลองคิดดูว่าสามารถแทนที่การตรวจสอบดังกล่าวได้หรือไม่ การเชื่อมต่อภายใน(ประเภทของการรวมแบบสอบถามซึ่งมีเพียงระเบียนที่มีอยู่ในทั้งสองตารางเท่านั้นที่ยังคงอยู่ในส่วนที่เลือก)ฟังก์ชัน IS NULL () ในคำขอ 1C
การทำงาน ISNULL ()ให้คุณแทนที่ค่าที่ขาดหายไปในฟิลด์คำขอด้วยค่าที่ระบุ (ค่ามาตรฐาน, stub)ตัวอย่างเช่น หากไม่มีข้อมูลเกี่ยวกับต้นทุนของผลิตภัณฑ์ เราจะระบุว่ามีค่าเท่ากับ 0 (ศูนย์) "SELECT | IS NULL (WT.Price, 0) AS Price | FROM Balance of Products AS WT"