📜  mysql 十进制 - SQL (1)

📅  最后修改于: 2023-12-03 15:33:03.014000             🧑  作者: Mango

MySQL 十进制 - SQL

MySQL 中的十进制数是一种高精度数值类型,可以存储比普通浮点数更精确的数据。使用十进制数类型可以避免浮点数精度丢失的问题,特别适用于精确计算、财务计算、货币计算等领域。

数据类型

MySQL 中的十进制数类型有两种:DECIMAL 和 NUMERIC。它们的区别仅在于明确的精度声明上。DECIMAL(p, s) 和 NUMERIC(p, s) 都表示精度为 p,小数位数为 s 的数值。

CREATE TABLE users(
  id INT PRIMARY KEY,
  name VARCHAR(20),
  balance DECIMAL(10, 2)
);

上面的 CREATE TABLE 语句定义了一个名为 users 的表,其中 balance 列的数据类型为 DECIMAL(10,2),表示最多有 10 个数字,小数部分有 2 位。

运算

与普通数值类型一样,MySQL 中的十进制数也支持常见的数值运算,例如加、减、乘、除等。需要注意的是,在做运算时,如果运算涉及到多种数值类型,MySQL 会自动将它们转换为相同的类型再做运算。

SELECT balance + 100 FROM users;
SELECT balance * 2.5 FROM users;
SELECT balance / 3 FROM users;

上面的代码演示了三种不同的运算,其中第一个语句将 balance 列的值加上 100,第二个语句将 balance 列的值乘以 2.5,第三个语句将 balance 列的值除以 3。

转换

如果需要将十进制数转换为普通数值类型,可以使用 CAST() 函数。

SELECT CAST(balance AS FLOAT) FROM users;

上面的代码演示了如何将 balance 列的值从 DECIMAL 类型转换为 FLOAT 类型。

舍入

MySQL 中的 ROUND() 函数可以用于对十进制数进行舍入计算。

SELECT ROUND(balance, 1) FROM users;

上面的代码将 balance 列的值舍入到小数点后一位,例如 12.345 会被舍入为 12.3。

总结

MySQL 中的十进制数类型提供了一种高精度的数值类型,适用于需要精确计算的场景。在使用时,需要明确精度和小数位数,并且需要注意数值转换和运算时的自动类型转换问题。