ผู้เขียน หัวข้อ: เรื่อง is null กับ is not null กับการตรวจสอบค่าว่าง  (อ่าน 25135 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ nongtan

  • Full Member
  • ***
  • กระทู้: 106
  • Respect: +1
    • ดูรายละเอียด
ไม่ทราบว่า ผมเข้าใจถูกหรือเปล่าครับ พอดีได้ลอง เรื่องส่งออก สกส. ที่ต้องมี เลขใบประกอบวิชาชีพ คือว่า

1. is null  กับ  =""              ใช้ต่างกันตรงที่ is null ใช้เช็ค ค่าว่าง ที่ไม่เคยคีย์ข้อมูลมาก่อนจริงๆ แต่ ="" คือ  อาจเคยคีย์แล้วลบให้เป็นค่าว่าง  ก็ให้ใช้การเช็คแบบนี้
2. is not null กับ <>""        ก็เหมือน ข้อ 1 แต่กลับกัน

ตัวอย่าง   
เช็คว่าคนไข้ ไหนที่ไม่มี licenseno  ก็ควรเช็คว่า
where licenseno is null or licenseno=""

เข้าใจถูกหรือเปล่าครับ  ช่วยหน่อยครับ...
ปล..เรื่องของเรื่องผมเอาโค๊ดใบรับรองยานอกของ อ.โก้ มาปรับดู ในส่วนของ การแสดงชื่อแพทย์ ล่างลายเซ็นต์
SELECT concat(p.pname,p.fname,"  ",p.lname) as ptname, p.hn, o.rxdate, v.age_y,
concat(d.name," ",d.strength," ",d.units) as drugname,
opn.*,concat(i.code,i.name,"(",i.tname,")") as diag, o.qty, o.sum_price,ocd.doctor as control_doctor,
if(ov.command_doctor <> "",ov.command_doctor,if(ov.command_doctor = ov.doctor,ov.command_doctor,ov.doctor)) as dr_code,

if(((ov.command_doctor is null or ov.command_doctor="") and (ov.doctor is null or ov.doctor="")),'',
if(ov.command_doctor is null or ov.command_doctor="",ov.doctor,ov.command_doctor)) as dr_code2


FROM ovst_presc_ned opn
JOIN drugitems d on d.icode = opn.icode
JOIN opitemrece o on o.vn = opn.vn and o.icode = opn.icode
JOIN patient p on p.hn = o.hn
JOIN vn_stat v on v.vn = o.vn
LEFT OUTER JOIN icd101 i on i.code = v.pdx
LEFT OUTER JOIN ovst_control_doctor ocd on ocd.vn = opn.vn
LEFT OUTER JOIN ovst ov on ov.vn = opn.vn
LEFT OUTER JOIN doctor dr on dr.code = ov.command_doctor
WHERE o.vn = "551025193614"
************************************************************
Value := GetSQLStringData('select concat(name,"[",    '+
'(select if(licenseno is null or licenseno ="","-",licenseno)),"]") as name   '+
' from doctor where code = "'+DBPipeLine['dr_code2']+'"');
« แก้ไขครั้งสุดท้าย: ตุลาคม 25, 2012, 20:39:12 PM โดย nongtan »
ชญานนท์ ร.พ. จิตเวชสงขลาราชนครินทร์
Master(กำลังปลด) : DELL  Ram 32GB HDD-SATA CentOS7MariaDB+TokuDB 10.1.14
Slave1 : HP Ram 8 GB CentOS7 MariaDB+TokuDB 10.1.14
Slave2 : Lenovo Ram 32GB HDD-SAS 400GB 4ลูก  CentOS7  กำลังลง MariaDB+TokuDB แต่ยังไม่ผ่าน
ขึ้นระบบโดย BMS Team เมื่อ 18พ.ค.52
HOSXP 3.

ออฟไลน์ mashimaro

  • Sr. Member
  • ****
  • กระทู้: 372
  • ทำทุกอย่างให้เต็มที่ ที่สุดแม้มันจะยากสักเท่าไหร่ เราจะผ่านมันไปได้
  • Respect: +8
    • ดูรายละเอียด
Re: เรื่อง is null กับ is not null กับการตรวจสอบค่าว่าง
« ตอบกลับ #1 เมื่อ: ตุลาคม 28, 2012, 20:50:08 PM »
0
 NULL คือค่าที่ไม่สามารถประมวลลได้ เช่น 1 หาร 0 ค่าที่ได้จะเป็น NULL และถ้าเราใช้ค่า NULL กับตัวดำเนินการทางคณิตศาสตร์หรือการเปรียบเทียบ ผลลัพธ์ที่ได้จะเป็น NULL เช่นกัน ครับ

SELECT concat(p.pname,p.fname,"  ",p.lname) as ptname, p.hn, o.rxdate, v.age_y,
concat(d.name," ",d.strength," ",d.units) as drugname,
opn.*,concat(i.code,i.name,"(",i.tname,")") as diag, o.qty, o.sum_price,ocd.doctor as control_doctor,
if(ov.command_doctor <> "",ov.command_doctor,if(ov.command_doctor = ov.doctor,ov.command_doctor,ov.doctor)) as dr_code,

if(((ov.command_doctor is null or ov.command_doctor="") and (ov.doctor is null or ov.doctor="")),'',
if(ov.command_doctor is null or ov.command_doctor="",ov.doctor,ov.command_doctor)) as dr_code2

FROM ovst_presc_ned opn
JOIN drugitems d on d.icode = opn.icode
JOIN opitemrece o on o.vn = opn.vn and o.icode = opn.icode
JOIN patient p on p.hn = o.hn
JOIN vn_stat v on v.vn = o.vn
LEFT OUTER JOIN icd101 i on i.code = v.pdx
LEFT OUTER JOIN ovst_control_doctor ocd on ocd.vn = opn.vn
LEFT OUTER JOIN ovst ov on ov.vn = opn.vn
LEFT OUTER JOIN doctor dr on dr.code = ov.command_doctor
WHERE o.vn = "551025193614"

ถ้าเจอ Statment อย่างนี้ให้เราถอดออกมาตรวจสอบที่ละ Table ครับ ว่าเจอ VN นี้หรือเปล่าครับ "551025193614"

จากนั้นเริ่มใส่เงื่อนไข

if(((ov.command_doctor is null or ov.command_doctor="") and (ov.doctor is null or ov.doctor="")),'',
if(ov.command_doctor is null or ov.command_doctor="",ov.doctor,ov.command_doctor)) as dr_code2

ทีละบรรทัดครับ เราจะเห็นข้อมูลที่ออกมาครับ ว่าเราเขียนอะไรผิดตรงไหนครับ

ลองดูครับ
Mashimaro
นักวิชาการคอมพิวเตอร์ โรงพยาบาลแม่สอด ตาก (รพท.420 เตียง)
เริ่มใช้ HOSxP มกราคม 2554 ปัจจุบันใช้ HOSxP V.3.54.1.3 วันที่ 8 ก.พ. 54
Main Server  :  Server OS Linux CentOS 5.5  MySQL
Slave Server  :  Server OS Linux CentOS 5.5  MySQL 5.1.23  HP Proliant ML150G3 Server
           Intel Xeon 5130 Dual Core Processor 2 GHz HDD 147 GB RAM 4 GB
ขึ้นระบบ  โดย บ.BMS  มกราคม 54   เข้าทำงานใน รพ. สิงหาคม 53
ขอขอบคุณ ทีมงานขึ้นระบบของคุณวินัย
งานหนักไม่เคยฆ่าคน
e-mail:  amnat_kalwtunkum@hotmail.com

ออฟไลน์ nongtan

  • Full Member
  • ***
  • กระทู้: 106
  • Respect: +1
    • ดูรายละเอียด
Re: เรื่อง is null กับ is not null กับการตรวจสอบค่าว่าง
« ตอบกลับ #2 เมื่อ: ตุลาคม 29, 2012, 09:04:10 AM »
0
ขอบคุณครับ แต่ก็ยัง งงๆๆ อยู่กับ  Field ที่ถูกประกาศเป็น String  ว่าถ้าเราจะตรวจสอบค่าว่าง  ทำไมเช็คเงื่อนไขแค่  =""  อย่างเดียวถึงมาไม่หมด แต่ถ้าเช็คทั้ง 2 อย่าง ข้อมูลที่ถูกต้องมาหมด ( is null or ="")
ชญานนท์ ร.พ. จิตเวชสงขลาราชนครินทร์
Master(กำลังปลด) : DELL  Ram 32GB HDD-SATA CentOS7MariaDB+TokuDB 10.1.14
Slave1 : HP Ram 8 GB CentOS7 MariaDB+TokuDB 10.1.14
Slave2 : Lenovo Ram 32GB HDD-SAS 400GB 4ลูก  CentOS7  กำลังลง MariaDB+TokuDB แต่ยังไม่ผ่าน
ขึ้นระบบโดย BMS Team เมื่อ 18พ.ค.52
HOSXP 3.

ออฟไลน์ pop_hosxp

  • Hero Member
  • *****
  • กระทู้: 3,128
  • Respect: +38
    • ดูรายละเอียด
    • Phanomphrai Hospital
Re: เรื่อง is null กับ is not null กับการตรวจสอบค่าว่าง
« ตอบกลับ #3 เมื่อ: ตุลาคม 29, 2012, 09:26:11 AM »
0
ขอบคุณครับ แต่ก็ยัง งงๆๆ อยู่กับ  Field ที่ถูกประกาศเป็น String  ว่าถ้าเราจะตรวจสอบค่าว่าง  ทำไมเช็คเงื่อนไขแค่  =""  อย่างเดียวถึงมาไม่หมด แต่ถ้าเช็คทั้ง 2 อย่าง ข้อมูลที่ถูกต้องมาหมด ( is null or ="")

ตอนสร้าง table ใช้คำสั่งไว้เป็น default null ดังนั้นค่าเริ่มต้นจะเป็น null คือ ค่าว่าง แต่หากใส่ข้อมูลแล้วมีการแก้ไข จะไม่ได้กลายเป็นค่า null ดังนั้นเวลาหาค่าว่าง และค่าที่ถูกบันทึก แต่ได้รับแก้ไขเป็นค่าว่างก็ต้องใช้ is null or ="" ครับ
pop434241@gmail.com
รพ.พนมไพร จ.ร้อยเอ็ด www.phanomphrai.net

ออฟไลน์ nongtan

  • Full Member
  • ***
  • กระทู้: 106
  • Respect: +1
    • ดูรายละเอียด
Re: เรื่อง is null กับ is not null กับการตรวจสอบค่าว่าง
« ตอบกลับ #4 เมื่อ: ตุลาคม 29, 2012, 14:13:44 PM »
0


ตอนสร้าง table ใช้คำสั่งไว้เป็น default null ดังนั้นค่าเริ่มต้นจะเป็น null คือ ค่าว่าง แต่หากใส่ข้อมูลแล้วมีการแก้ไข จะไม่ได้กลายเป็นค่า null ดังนั้นเวลาหาค่าว่าง และค่าที่ถูกบันทึก แต่ได้รับแก้ไขเป็นค่าว่างก็ต้องใช้ is null or ="" ครับ

เข้าใจแล้วครับ ตามนั้นเลย  ขอบคุณครับ
ชญานนท์ ร.พ. จิตเวชสงขลาราชนครินทร์
Master(กำลังปลด) : DELL  Ram 32GB HDD-SATA CentOS7MariaDB+TokuDB 10.1.14
Slave1 : HP Ram 8 GB CentOS7 MariaDB+TokuDB 10.1.14
Slave2 : Lenovo Ram 32GB HDD-SAS 400GB 4ลูก  CentOS7  กำลังลง MariaDB+TokuDB แต่ยังไม่ผ่าน
ขึ้นระบบโดย BMS Team เมื่อ 18พ.ค.52
HOSXP 3.