ตรวจสอบค่าว่าเป็นตัวเลข 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 แทน

Comments

Anonymous said…
อร่อยดีมีประโยชน์
jacisaber said…
Tinon titanium coating - TINON® STRIKING TINON®
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,

Popular posts from this blog

Function MS SQL แปลงตัวเลขเป็นบาท

Line Notify ด้วย VB.Net