\

Facebook


วันพุธที่ 7 ตุลาคม พ.ศ. 2558

จัดระเบียบ SQL Query ให้อ่านง่ายๆสบายตา DEV ด้วย ApexSQL



สำหรับท่านที่ต้องใช้งาน MSSMS อยู่เป็นประจำน่าจะเจอปัญหาคล้ายๆกับผมคือ "เวลาแก้ store procedure จะเจอกับโค๊ดเทพที่ยุ่งเหยิง วุ่นวาย ไม่ได้ใส่ UPPER CASE บ้าง ย่อหน้าอ่านยากบ้าง" ซึ่งมันบั่นทอนกำลังให้การแก้เป็นอย่างมาก วันนี้ผมมาแนะนำ Free Plugin ที่จะทำให้โค๊ดอ่านง่ายยิ่งขึ้น ลุยเลย

ไปโหลดปลั้กอินจากหน้า https://www.apexsql.com/Download.aspx แล้วเลือกตัว ApexSQL Refactor  ซึ่งเป็น Free Tool ให้โหลดฟรีไม่คิดค่าใช้จ่าย จากนั้น Install ให้สมบูรณ์แล้ว restart MSSMS อีกครั้งหนึ่ง จะเห็นเมนูเพิ่มขึ้นมาที่มุมซ้ายบน


มีอยู่ 4 เมนูให้เลือกคือ

- Default 
- Compact
- Extended
- MSDN SQL BOL ถ้าชอบเดียวกับ doc บน MSDN ให้เลือกแบบนี้ครับ

สำหรับผม ชอบแบบสุดท้ายที่สุดเพราะมันจะกระจาย SELECT ที่เจอไปบรรทัดใหม่ และแบ่ง Where Clause Condition ไปบรรทัดใหม่เช่นเดียวกัน แต่ถ้าเลือกเเบบ Compact จะขึ้นบรรทัดใหม่เฉพาะตัวที่เป็น QUERY หลักซึ่งคิวรี่ที่เหลือจะยาวเสียจนทะลุบรรทัด แต่ดูเป็นระบบกว่าแม้จะไม่ค่อยสะอาดตาสักเท่าไหร่

มาดูตัวอย่าง ก่อนจัดระเบียบ







หลังจัดระเบียบ

วันพฤหัสบดีที่ 1 ตุลาคม พ.ศ. 2558

เทคนิคง่ายๆในการแสดงข้อมูลประเภทการเงิน การบัญชี ใน SQL SERVER


ในเรื่องเงินๆทองๆ หน่วยที่น้อยที่สุดคือ 1 สตางค์ (ทศนิยมสองตำแหน่งจะได้ 0.01) และ SQL SERVER ได้สร้างประเภทข้อมูลทางราคาไว้ให้ใช้งานง่ายๆแล้วคือ DECIMAL แต่การคำนวนจริงๆได้ข้อมูลที่ละเอียดกว่า 2 ตำแหน่งอยู่แล้ว ตัวอย่างง่ายๆก็เช่น อยากได้ค่าภาษี(6.3%) กับสินค้า 1295 บาท จะได้ 81.585 คำถามคือ 0.005 ที่เกินมาเราจะทำยังไง

ปล.ตอนรับเรทภาษีมูลค่าเพิ่มใหม่จาก 7% เป็น 6.3% ที่เริ่ม 1 ตุลานี้ เลยเขียนบทความนี้เป็นตัวอย่างซะเลย

เราก็จะปัดขึ้นหรือปัดลงตามปกติ แต่เมื่อสินค้ามีเพิ่มเป็นร้อย เป็นพันชิ้น มันจะเริ่มเห็นความเเตกต่างของเงินที่คำนวนได้ ก็เงินที่จ่ายจริงๆ ในภาษาโปรแกรมเราสามารถเก็บค่าก่อนปัดเศษเพิ่อเอาไว้คำนวนต่อมีฟังชั่นประมาณนี้

ROUND() คือการปัดขึ้นถ้าเศษสุดท้ายมากกว่า 5 และปัดลงถ้าเศษน้อยกว่า 5 สามารถกำหนดความละเอียดของตำแหน่งทศนิยมได้
SELECT ROUND(81.585, 3, 2)
-- 81.585

แล้วยังกำหนดความละเอียดของหลักที่จะเริ่มปัดได้ เช่น
SELECT ROUND(81.585, 2)
-- 81.590

FLOOR() คือการปัดลงทุกกรณี
SELECT FLOOR(81.585)
-- 81

CEILING() คือการปัดขึ้นทุกกรณี
SELECT CEILING(81.585)
-- 82

อีกเทคนิคหนึ่งคือการ CAST หรือการเปลี่ยน TYPE ของตัวเลขซะเลย ซึ่งจริงๆแล้วมันคือการ ROUND() ก่อน CAST() เช่น
SELECT CAST( 0.0453 AS DECIMAL(10,2))
--0.05
*จะเห็นว่าเศษโดนปัดก่อนแปลงเป็นทศนิยม 2 หลัก

ถ้าคุณเขียนโปรแกรมเกี่ยวกับฟังชั่นคำนวนบัญชีคงจะมีประโยชน์อยู่ไม่น้อย เพราะงานเหล่านี้ทุกทศนิยมต้องเปะๆเท่ากัน ห้ามมีตกหล่น แล้วการปัดเศษง่ายๆนี้แหละที่ทำให้พลาดกัน

May be like this posts