MySQL中常见的数据类型的字段有几种?数据精度如何控制?

在MySQL中,常见的数据类型字段包括以下几种:

整数类型:

TINYINT:一个很小的整数,有符号范围是-128到127,无符号范围是0到255。
SMALLINT:较小的整数,有符号范围是-32768到32767,无符号范围是0到65535。
MEDIUMINT:中等大小的整数,有符号范围是-8388608到8388607,无符号范围是0到16777215。
INT:普通大小的整数,有符号范围是-2147483648到2147483647,无符号范围是0到4294967295。
BIGINT:大整数,有符号范围是-9223372036854775808到9223372036854775807,无符号范围是0到18446744073709551615。

小数类型:

FLOAT:单精度浮点数,存储范围较大,但精度相对较低。
DOUBLE:双精度浮点数,存储范围更大,精度更高。

定点类型:

DECIMAL:用于精确存储小数,可以指定精度和范围。

字符串类型:

CHAR:固定长度的字符串,最多 255 个字符。
VARCHAR:可变长度的字符串,最多 65535 个字符。
TEXT:用于存储大量文本数据。

日期和时间类型:

DATE:存储日期,格式为 'YYYY-MM-DD'。
TIME:存储时间,格式为 'HH:MM:SS'。
DATETIME:存储日期和时间,格式为 'YYYY-MM-DD HH:MM:SS'。

数据精度控制方法如下: 

## 1、四舍五入 ##

要对数据进行四舍五入,通常可以使用ROUND函数。其语法如下:

SELECT ROUND(number, decimals);

number为待处理数字,decimals为保留小数点位数

在SQL中,对时间进行四舍五入可以使用类似于对数字进行四舍五入的技术。你可以使用ROUND函数来对时间进行四舍五入,不过需要先将时间转换为秒数,然后再进行四舍五入操作。

以下是一个示例,假设有一个时间字段time_field,你可以使用如下SQL语句对其进行四舍五入:

SELECT TIME_FORMAT(SEC_TO_TIME(ROUND(TIME_TO_SEC(time_field), 0)), '%H:%i:%s') AS rounded_time
FROM your_table;

在这个示例中,TIME_TO_SEC(time_field)将时间字段转换为秒数,然后使用ROUND函数对秒数进行四舍五入,最后再通过
SEC_TO_TIME和TIME_FORMAT函数将秒数转换回时间格式,并保留所需的精度。

## 2、向上取整 ##

要对数据进行向上取整(进一法),可以使用CEIL函数。其语法如下:

SELECT CEIL(number);

在SQL中,对时间进行向上取整(进一法)可以使用类似于对数字进行向上取整的方法。你可以使用CEIL函数来对时间进行向上
取整,不过同样需要先将时间转换为秒数,然后再进行向上取整操作。

以下是一个示例,假设有一个时间字段time_field,你可以使用如下SQL语句对其进行向上取整      

SELECT TIME_FORMAT(SEC_TO_TIME(CEIL(TIME_TO_SEC(time_field) / 60) * 60), '%H:%i:%s') AS rounded_time
    FROM your_table;

在这个示例中,首先使用TIME_TO_SEC(time_field)将时间字段转换为秒数,然后使用CEIL函数对秒数除以60后向上取整,再
乘以60得到最接近的整分钟的秒数,最后通过SEC_TO_TIME和TIME_FORMAT函数将秒数转换回时间格式,并保留所需的精度。

**为什么要对秒数先除以60后乘以60???****

这个步骤是为了实现对时间向上取整到最接近的整分钟。

首先,我们将时间转换为秒数,然后将其除以60,这样可以得到相应时间的分钟数。而向上取整操作保证了无论原始秒数是多少,它都会被向上舍入到最接近的整分钟。例如,如果原始秒数是30秒,向上取整后就会成为1分钟;如果原始秒数是59秒,向上取整后同样会成为1分钟。

接着,我们再将这个向上取整后的分钟数乘以60,这样就得到了最接近的整分钟所对应的秒数。这一步是为了将分钟数转换回秒数,并且确保结果是整分钟的整数秒数,而不是原始秒数的小数部分。

最后,我们将这个整分钟的秒数转换回时间格式,这样就完成了对时间的向上取整操作,使其最接近的整分钟。

## 3、向下取整 ##

FLOOR() 函数:该函数可以向下取整,返回小于或等于指定数字的最大整数。

 SELECT FLOOR(number);

## 4、截断数字到指定的小数位数 ##

TRUNCATE()函数:该函数可以截取数字到指定的小数位数。

SELECT TRUNCATE(number, decimals);

## 5、格式化数字并添加千位分隔符 ##

FORMAT() 函数:该函数可以格式化数字并添加千位分隔符。

SELECT FORMAT(number, decimals);

注:小数后添加千位分隔符会按照四舍五入的方式

## 6、向左或向右填充字符串##

LPAD() 和 RPAD() 函数:这两个函数分别用于向左或向右填充字符串,可以用来控制字符串的长度和精度。

SELECT LPAD(number, 字符串总长度,'填充') 
    SELECT LPAD(number, 10, '0');
    SELECT RPAD(number, 10, ' '); 

注:要补充空格需要加空格' ',如果不加会显示NULL

## 7、 从左或从右截取字符串 ##

1、LEFT()函数
语法:LEFT(character,integer)
注释:参数1:要截取的字符串,参数2:截取字符个数
说明:返回从字符串左边开始指定个数的字符

select LEFT('SqlServer_2023',3)

结果:Sql

2、RIGHT()函数
语法:RIGHT(character,integer)
注释:参数1:要截取的字符串,参数2:截取字符个数
说明:返回从字符串右边开始指定个数的字符

select RIGHT('SqlServer_2023',4)

结果:2023

##写出对应的语句,验证相关函数的结果 ##

    1 SELECT ROUND(123.456, 2); -----123.46
    2 SELECT CEIL(123.456); ----- 124
    3 SELECR FLOOR(123.456); ----- 123
    4 SELECT TRUNCATE(123.45678, 3); -----123.456
    5.1 SELECT FORMAT(12345678, 4); -----12345678.0000
    5.2 SELECT FORMAT(123.45678, 3); -----123.457
    6.1 SELECT LPAD(123456, 10, '0'); -----0000123456
    6.2 SELECT RPAD(123456, 10, '0'); -----1234560000
    6.3 SELECT LPAD(123456, 10, ' '); -----123456
    6.4 SELECT LPAD(123, 10, ' '); -----   123
    6.5 SELECT LPAD(123456, 10, '');-----NULL
    7.1 SELECT LEFT ('HELLOWORLD',5);-----HELLO
    7.2 SELECT RIGHT ('HELLOWORLD',5);-----WORLD

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值