BMS-HOSxP Community

HOSxP => นอกเรื่อง => ข้อความที่เริ่มโดย: nongtan ที่ ตุลาคม 25, 2012, 18:56:31 PM

หัวข้อ: เรื่อง is null กับ is not null กับการตรวจสอบค่าว่าง
เริ่มหัวข้อโดย: nongtan ที่ ตุลาคม 25, 2012, 18:56:31 PM
ไม่ทราบว่า ผมเข้าใจถูกหรือเปล่าครับ พอดีได้ลอง เรื่องส่งออก สกส. ที่ต้องมี เลขใบประกอบวิชาชีพ คือว่า

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']+'"');
หัวข้อ: Re: เรื่อง is null กับ is not null กับการตรวจสอบค่าว่าง
เริ่มหัวข้อโดย: mashimaro ที่ ตุลาคม 28, 2012, 20:50:08 PM
 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

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

ลองดูครับ
หัวข้อ: Re: เรื่อง is null กับ is not null กับการตรวจสอบค่าว่าง
เริ่มหัวข้อโดย: nongtan ที่ ตุลาคม 29, 2012, 09:04:10 AM
ขอบคุณครับ แต่ก็ยัง งงๆๆ อยู่กับ  Field ที่ถูกประกาศเป็น String  ว่าถ้าเราจะตรวจสอบค่าว่าง  ทำไมเช็คเงื่อนไขแค่  =""  อย่างเดียวถึงมาไม่หมด แต่ถ้าเช็คทั้ง 2 อย่าง ข้อมูลที่ถูกต้องมาหมด ( is null or ="")
หัวข้อ: Re: เรื่อง is null กับ is not null กับการตรวจสอบค่าว่าง
เริ่มหัวข้อโดย: pop_hosxp ที่ ตุลาคม 29, 2012, 09:26:11 AM
ขอบคุณครับ แต่ก็ยัง งงๆๆ อยู่กับ  Field ที่ถูกประกาศเป็น String  ว่าถ้าเราจะตรวจสอบค่าว่าง  ทำไมเช็คเงื่อนไขแค่  =""  อย่างเดียวถึงมาไม่หมด แต่ถ้าเช็คทั้ง 2 อย่าง ข้อมูลที่ถูกต้องมาหมด ( is null or ="")

ตอนสร้าง table ใช้คำสั่งไว้เป็น default null ดังนั้นค่าเริ่มต้นจะเป็น null คือ ค่าว่าง แต่หากใส่ข้อมูลแล้วมีการแก้ไข จะไม่ได้กลายเป็นค่า null ดังนั้นเวลาหาค่าว่าง และค่าที่ถูกบันทึก แต่ได้รับแก้ไขเป็นค่าว่างก็ต้องใช้ is null or ="" ครับ
หัวข้อ: Re: เรื่อง is null กับ is not null กับการตรวจสอบค่าว่าง
เริ่มหัวข้อโดย: nongtan ที่ ตุลาคม 29, 2012, 14:13:44 PM


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

เข้าใจแล้วครับ ตามนั้นเลย  ขอบคุณครับ