การค้นหาข้อมูลที่มีทศนิยมเกิน 2 ตำแหน่งด้วย SUBSTR() และ INSTR()
เมื่อต้องการกรองเฉพาะแถวที่มีค่าทศนิยมมากกว่า 2 ตำแหน่ง (เช่น 234.5678, 23.456) สามารถใช้ฟังก์ชัน SUBSTR() ร่วมกับ INSTR() และ LENGTH() ได้ วิธีนี้เหมาะสำหรับข้อมูลที่เก็บเป็น VARCHAR
ตัวอย่างการใช้งาน
สร้างตารางและเพิ่มข้อมูล:
mysql> CREATE TABLE selectRows2DecimalPlacesDemo (
-> Amount VARCHAR(100)
-> );
Query OK, 0 rows affected (0.73 sec)
mysql> INSERT INTO selectRows2DecimalPlacesDemo VALUES('234.5678');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO selectRows2DecimalPlacesDemo VALUES('19.50');
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO selectRows2DecimalPlacesDemo VALUES('23.456');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO selectRows2DecimalPlacesDemo VALUES('12.123');
Query OK, 1 row affected (0.14 sec)
ข้อมูลทั้งหมด:
mysql> SELECT * FROM selectRows2DecimalPlacesDemo;
+----------+
| Amount |
+----------+
| 234.5678 |
| 19.50 |
| 23.456 |
| 12.123 |
+----------+
4 rows in set (0.00 sec)
คำสั่งค้นหาแถวที่มีทศนิยมมากกว่า 2 ตำแหน่ง:
mysql> SELECT * FROM selectRows2DecimalPlacesDemo
-> WHERE LENGTH(SUBSTR(Amount, INSTR(Amount, '.'))) > 3;
ผลลัพธ์ (ตัด 19.50 ออก เพราะมีทศนิยม 2 ตำแหน่งเท่านั้น):
+----------+
| Amount |
+----------+
| 234.5678 |
| 23.456 |
| 12.123 |
+----------+
3 rows in set (0.00 sec)
คำอธิบาย
INSTR(Amount, '.')หาตำแหน่งของจุดทศนิยมSUBSTR(Amount, ...)ดึงสตริงตั้งแต่จุดทศนิยมจนจบ (รวมจุดด้วย)LENGTH(...) > 3ตรวจสอบความยาว: จุดทศนิยม (1 ตัว) + ตัวเลขทศนิยม > 2 ตัว = ความยาว > 3
หมายเหตุ: วิธีนี้ใช้ได้กับข้อมูลที่เก็บเป็นสตริง (VARCHAR/TEXT) หากเป็นชนิดตัวเลข (DECIMAL/FLOAT) ควรใช้การเปรียบเทียบค่าทางคณิตศาสตร์แทน