BMS-HOSxP Community
HOSxP => นอกเรื่อง => ข้อความที่เริ่มโดย: 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']+'"');
-
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
ทีละบรรทัดครับ เราจะเห็นข้อมูลที่ออกมาครับ ว่าเราเขียนอะไรผิดตรงไหนครับ
ลองดูครับ
-
ขอบคุณครับ แต่ก็ยัง งงๆๆ อยู่กับ Field ที่ถูกประกาศเป็น String ว่าถ้าเราจะตรวจสอบค่าว่าง ทำไมเช็คเงื่อนไขแค่ ="" อย่างเดียวถึงมาไม่หมด แต่ถ้าเช็คทั้ง 2 อย่าง ข้อมูลที่ถูกต้องมาหมด ( is null or ="")
-
ขอบคุณครับ แต่ก็ยัง งงๆๆ อยู่กับ Field ที่ถูกประกาศเป็น String ว่าถ้าเราจะตรวจสอบค่าว่าง ทำไมเช็คเงื่อนไขแค่ ="" อย่างเดียวถึงมาไม่หมด แต่ถ้าเช็คทั้ง 2 อย่าง ข้อมูลที่ถูกต้องมาหมด ( is null or ="")
ตอนสร้าง table ใช้คำสั่งไว้เป็น default null ดังนั้นค่าเริ่มต้นจะเป็น null คือ ค่าว่าง แต่หากใส่ข้อมูลแล้วมีการแก้ไข จะไม่ได้กลายเป็นค่า null ดังนั้นเวลาหาค่าว่าง และค่าที่ถูกบันทึก แต่ได้รับแก้ไขเป็นค่าว่างก็ต้องใช้ is null or ="" ครับ
-
ตอนสร้าง table ใช้คำสั่งไว้เป็น default null ดังนั้นค่าเริ่มต้นจะเป็น null คือ ค่าว่าง แต่หากใส่ข้อมูลแล้วมีการแก้ไข จะไม่ได้กลายเป็นค่า null ดังนั้นเวลาหาค่าว่าง และค่าที่ถูกบันทึก แต่ได้รับแก้ไขเป็นค่าว่างก็ต้องใช้ is null or ="" ครับ
เข้าใจแล้วครับ ตามนั้นเลย ขอบคุณครับ