Tag SQL

The Clean SQL

ถ้าจะถามภาษาที่นิยมที่สุด มาเป็นเวลาอย่างยาวนานแล้ว มันมีภาษานึงครับที่ยอดฮิตตั้งแต่อดีตจนถึงปัจจุบัน และในอนาคตอีกหลาย 10 ปีครับ ภาษานั้นก็คือ ภาษา SQL ครับ สำหรับตัว SQL หรือ Structured Query Language มีไว้ เพื่อจัดการกับข้อมูลเป็นหลักครับ แม้ว่าตัว SQL ช่วยให้เราจัดการชีวิตได้ง่ายขึ้นแล้ว อยากได้ข้อมูลเขียน SELECT * FROM TABLE WHERE CONDITION ได้ข้อมูลมาแล้วครับ ถ้าในยุคแรกๆนี้เขียน Relational Algebra เพื่อมาหาข้อมูลกันเลย แต่ตัว SQL มันมีปัญหาในตัวเองครับ กว่าจะรู้ว่าเขียน Query ไม่ใช่ตอน Complie Time…

[DB2] แค่เปลี่ยน Query ชีวิตก็ดีขึ้นแล้ว JOIN vs Sub Query

IBM DB2

วันนี้พอดีมาประจำการที่ Site และได้ดูเคสบ่นๆจาก User ว่าทำไมหน้า Exchange Rate มันช้าจังเลย เปิดทีรอ 2-3 นาทีได้ ตอนแรกเราก็เฉยๆอยู่ เพราะงานหลักของเรา คือ BOT DMS (DataSet กับ DataFile 2 พี่น้อง) แต่พอสักสายๆ เข้า BA บอกว่าเปิดไม่ได้เลย เค้าลอง Interface feed ข้อมูล ย้อนหลัง 10 ปี เข้าไป น่าจะประมาน 100,000 Record ได้ หลังจากผมเข้าไปดูที่เครื่อง BA สิ่งที่ผมเข้าใจได้…

[DB2] User Define Function – SQL Scalar Example

IBM DB2

พอดีมีรุ่นน้องให้สอนการเขียน Function บน DB2 ครับ โดย Function ที่ผมเขียนเป็นแบบ SQL Scalar Function โดยเจ้า SQL Scalar Function เป็น Function ที่คืนค่าผลลัพธ์ มีการคืนผลลัพธ์ออกมาค่าเดียวเสมอ โดยมีรูปแบบข้อมูล เช่น datetime, int, varchar เป็นต้นครับ ตัวอย่าง Scalar Function ที่มีในระบบพวก ABS() ที่ส่งตัวเลข เข้าไป คืนผลลัพธ์ที่ตัวเครื่องหมายแล้ว ออกมาค่าเดียวครับ เช่น ABS(-5) = 5 สำหรับ Function…

[DB2] SQL สำหรับตรวจสอบ Version ของ DB2

ช่วงนี้ไป UAT บ่อย เริ่มเจอปัญหาแปลกของ Enviroment ของ Production กับ Enviroment ที่ใช้ในการ Development ที่บริษัท แตกต่างกัน ทำให้เวลาที่เราฝั่งคำสั่งบางตัว อาจจะเกิดปัญหาขึ้นได้ครับ โดยวันนี้ผมขอแปะ Query สำหรับดู Version และ Fix Pack ของ DB Server ดังนี้ครับ [sql] SELECT SERVICE_LEVEL , FIXPACK_NUM FROM TABLE (SYSPROC.ENV_GET_INST_INFO()) AS INSTANCEINFO [/sql] โดยผลลัพธ์ที่ได้ จาก Query…

[PowerShell] Convert Unicode Text or SQL File To ASCII

powershell

สำหรับที่มาของ Script ชุดนี้นี่ทำ Team วุ่นวายเลย เรื่องก็มีอยู่ว่าเวลาพัฒนาระบบต่างๆมันมีในส่วนของ Source Code และ SQL Script ซึ่งต้องนำไป Run ใน Enviromemt ของ Test, Dev หรือ Production ก็ตาม แต่เพราะความสะเพร่าของผมเองที่ Save File Script เป็นแบบ Unicode เกิดปัญหาขึ้นเมื่อนำไป Run บน Database Server DB2 บนเครือง AIX จะเกิด Error Message ดังนี้ Error…

[SQL SERVER] Invalid character value for cast specification

Microsoft SQL Server

วันนี้ผมแก้ App เก่าๆของที่บริษัทแล้วเกิดเจอปัญหา Invalid character value for cast specification ตอนนั้นไล่ข้อมูลแทบตาย เจอมวลมหา Function Call และไปพบว่ามันผิดที่วันที่ (Date) ที่มีการจัด Format ผิด โดยไอ้เจ้าปัญหา Invalid character value for cast specification มันมีความหมายว่าข้อมูลทางเราเป็น input ส่งให้ Database แล้วตัว DBMS เองไม่สามารถแปลงข้อมูล และเก็บลงฐานข้อมูลได้นั้น ซึ่งสาเหตุอาจจะเกิดจากหลายๆสาเหตุ เช่น ข้อมูลประเภท Date ที่ Format ผิด หรือข้อมูลประเภท…

SELECT ซ้อน SELECT

Microsoft SQL Server

หลายครั้งที่เราได้โจทย์ หรือปัญหามาแก้โดยใช้วิธีการ Query จากฐานข้อมูลมา ซึ่งมีรูปแบบการ Query หลายแบบ ได้แก่ การเขียน JOIN ตาราง, UNION หรือ ทำเป็น Sub Query เป็นต้น ในวันนี้ผมขอนำเสนอวิธีการเขียน SELECT IN SELECT ซึ่งเป็นวิธีการเขียน Query แบบหนึ่งที่ช่วยแก้ปัญหาได้มากมาย และลดการเขียน Coding ที่ไม่จำเป็นได้อีก ตัวอย่างปัญหา เราต้องการดูข้อมูลการจ่ายดอกเบี้ยทั้งหมด เพื่อนำมาออกรายงาน โดยมีเงื่อนไขดังนี้ ข้อมูลที่ใช้กับตัวอย่างนี้ ขั้นตอนการแก้ปัญหา (ถ้ามีการเขียน SQL ผมขอใช้ SYNTAX ของ SQL Server นะครับ)…

SQL JOINS

ตอนแรกทำงานไป ทำงานมา ก็เกิดสงสัยว่า JOIN นี่มีกี่แบบ โดยมีคำถามหลายข้อเลย โดยผมขอสรุปเป็นข้อๆ ดังนี้คำถาม: LEFT JOIN กับ LEFT OUTER JOIN ต่างกันอย่างไรคำตอบ: ไม่ต่างกันเลย การทำงานเหมือนกัน คำถาม: INNER JOIN กับ OUTER JOIN ต่างๆกันอย่างไรคำตอบ: INNER JOIN  เอาข้อมูลมาที่เหมือนกันท้ังสองฝั่งมาเทรวมกัน(Intersect) กัน แต่ OUTER JOIN เป็นการเทข้อมูลทั้งฝั่งใดฝั่งหนึ่ง หรือทั้งสองฝั่งมารวมกัน(Union) คำถาม: แล้วมีการ JOIN แบบอื่นๆ หรือไม่คำตอบ: มี โดยผมขอเกริ่นสรุปรูปแบบการ JOIN ของ TABLE ก่อน เพื่อเป็นการท้าวความหลังก่อนนะครับ…

[SQL] การบอกลำดับของ Record จากการ Select ข้อมูล

วันนี้มีเพื่อนที่ทำงานถามว่าจะเพิ่มคอลัมน์ เพื่อบอกลำดับของข้อมูลอย่างไร เพราะใน DB ก็ไม่ได้เก็บอยู่แล้ว จะเขียนใน Query หรือ มา Loop และ Count เองใน Code ดี ข้อมูลใน DB (Input) Firstname   | Lastname   | Salary กอไก่       | ไข่เจียวหมูสับ | 50,000 ขอไก่       | เกิดก่อนไก่  …

[MSSQL] SQL กับการบวก/ลบวันที่

Microsoft SQL Server

วันนี้ผมได้งานจากที่่ทำงานมาให้เขียน Query เพื่อแจ้งเตือนสินค้าที่หมดอายุล่วงหน้าตามวันที่กำหนดไว้ ระหว่างวันที่กำหนดจนถึงจำนวนวันที่แจ้งเตือนล่วงหน้า โดยเอาผลัลพธ์ที่ได้มาจัดโปรโมชั่นลดแลกแจกแถมกัน (สมมติว่าเป็น 7 วัน) โดยผมค่อยๆแนะนำไปทีละขั้นตอน ดังนี้ เตรียมข้อมูล