ตรวจสอบค่าว่าเป็นตัวเลข MSSQL
วันก่อนพี่แสงชัย ให้ผมตรวจสอบดูว่าในฐานขู้อมูลนี้มีค่า Serial Number แถวไหนบ้างที่มีตัวหนังสือปนอยู่ คือต้องการเก็บตัวเลขล้วนๆ ตอนแรกผมก็ใช้คำสั่ง IsNumeric ดูปรากฏว่าก็ทำงานได้แหะ ตัวอย่างการเรียกใช้ SELECT * FROM TR_REC_STK_SR WHERE ISNUMERIC(SERIAL_NO) = 0 โดย IsNumeric จะ Return 1 ให้ถ้าสามารถแปลงข้อความทั้งหมดเป็นตัวเลขได้ แต่หลังจากที่ลองค้นหาจาก Google ต่ออีกซักพัก (เพื่อความชัวร์) ปรากฏว่า คำสั่ง IsNumeric มีจุดอ่อนอยู่ เค้าแนะนำให้ใช้คำสั่งรูปแบบด้านล่างนี้แทนครับ SELECT *, PATINDEX('%[^0-9]%', SERIAL_NO) FROM TR_REC_STK_SR WHERE PATINDEX('%[^0-9]%', LTRIM(RTRIM(SERIAL_NO))) > 0 ลองรันดู โอ้ว... Record เพิ่มขึ้นมาอีก 4-5 Rows ฉะนั้นถ้าจะตรวจสอบว่าข้อมูลมีแต่ตัวเลขล้วนๆ ให้ใช้แบบหลังแทนครับ ปล. IsNumeric มันแปลง 1234E หรือ 1234. เป็นตัวเลขได้ครับ เลยต้องใช้ PatIndex แทน