\

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

  • Unix Timestamp เวลามาตราฐานที่ใช้ในการเปรียบเทียบทั่วโลก
    16/04/2014 - 1 Comments
    Unix Timestamp คืออะไร? Unix Time คือเวลาที่บวก 1 เพิ่มทุกๆวินาที…
  • อัพเดตโค๊ด Revisionล่าสุดมาMerge >> แล้วโค๊ดอะไรเปลี่ยนแปลงบ้าง
    27/08/2013 - 0 Comments
    การใช้งาน Revision Control ในโปรเจกค์เขียนโปรแกรมที่มีขนาดใหญ่ถือว่าจำเป็นมาก…
  • [Skype] Emoticon ใหม่จากหนังเรื่อง Captain America: the winter soldier ลองกันละยัง
    17/04/2014 - 0 Comments
    Emoticon ที่ซ่อนอยู่ของ Skype Skype จะมีอิโมติคอนที่ซ่อนอยู่ซึ่งจะไม่แสดงตรงหน้ากรอก message…
  • SQL SERVER ERROR: 40 บันทึกการพังของเอสคิวแอลเซิฟเวอร์
    25/08/2014 - 0 Comments
    SQL SERVER ERROR : 40 - Could not open connection to SQL Server ใครเจอ error code 40 ในตัว SQL SERVER…
  • วิธีปลด Table Lock ใน SQL SERVER 2008R2
    22/08/2017 - 0 Comments
    เคยเจอไหม เวลา SELECT ข้อมูลจาก database เเล้วมันหมุนไม่หยุด ไม่ใช้เพราะ query ทำงานนานเเต่อาจเป็นเพราะ…
  • แก้ปัญหา  Shutdown ไม่ลง
    12/02/2018 - 0 Comments
    การ Shutdown หลังใช้งาน PC/ Notebook ระบบ Windows เสร็จทำให้เครื่องใช้งานอยู่กับเราได้นานกว่าการ sleep…
  • 3 Plugins ฟรีสำหรับ Visual Studio 2017 ที่ DEV ทุกคนควรมีไว้ในครอบครองแบบ must have
    05/02/2018 - 0 Comments
    เขียนโปรแกรมสาย .NET จำเป็นต้องใช้  Visual Studio อย่างแน่นอนซึ่งการทำงานบน tool…