ตรวจสอบค่าว่าเป็นตัวเลข 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 แทน
ตอนแรกผมก็ใช้คำสั่ง 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 แทน
Comments
Titanium coating has two distinctive titanium easy flux 125 amp welder characteristics, namely: titanium rings for women a thicker samsung galaxy watch 3 titanium material. TINON® toaks titanium 750ml pot offers a coating for creating a thicker titanium curling wand material,