Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL: ดึงเรคคอร์ดที่ทศนิยมเป็นจำนวนเต็ม (เช่น 12.00, 9.00) ด้วย FLOOR()


คำอธิบาย

ใช้ FLOOR() ปัดเศษทิ้งทศนิยม แล้วเปรียบเทียบกับค่าเดิม หากเท่ากัน แสดงว่าทศนิยมเป็น .00 (จำนวนเต็ม)

ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง

mysql> create table DemoTable ( 
    Value DECIMAL(4,2) ); 
Query OK, 0 rows affected (0.53 sec)

การเพิ่มข้อมูล

mysql> insert into DemoTable values(54.20); 
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(55.0); 
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable values(7.8); 
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(9.0); 
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(9.2); 
Query OK, 1 row affected (0.21 sec)

แสดงข้อมูลทั้งหมด

mysql> select * from DemoTable;

ผลลัพธ์:

+-------+
| Value |
+-------+
| 54.20 |
| 55.00 |
| 7.80  |
| 9.00  |
| 9.20  |
+-------+
5 rows in set (0.00 sec)

คิวรี่กรองเฉพาะค่าที่ทศนิยมเป็น .00

mysql> select * from DemoTable where Value = FLOOR(Value);

ผลลัพธ์

+-------+
| Value |
+-------+
| 55.00 |
| 9.00  |
+-------+
2 rows in set (0.02 sec)

คำอธิบาย

  • FLOOR(55.00) = 55 → เท่ากับ 55.00 ✓
  • FLOOR(9.00) = 9 → เท่ากับ 9.00 ✓
  • FLOOR(54.20) = 54 ≠ 54.20 ✗
  • FLOOR(7.80) = 7 ≠ 7.80 ✗
  • FLOOR(9.20) = 9 ≠ 9.20 ✗

วิธีอื่น

-- ใช้ MOD (Modulo)
WHERE MOD(Value, 1) = 0

-- ใช้ TRUNCATE
WHERE Value = TRUNCATE(Value, 0)

-- ใช้ CAST (MySQL 8.0+)
WHERE Value = CAST(Value AS UNSIGNED)

ข้อควรระวัง

FLOAT/DOUBLE อาจมีปัญหา Precision (เช่น 9.0000000001) ควรใช้ DECIMAL สำหรับเงิน/การคำนวณที่ต้องแม่นยำ