关于Mysql日期查询问题

用输入帮助输出,用输出倒逼输入;事虽难做则必成,路虽远行则将至~

我是小幸运陪你一起乘风破浪!

前言

已知数据库存在记录的情况下,我想筛选出时间符合14:45:00的记录,select * from 表 where time='14:45:00'报Incorrect datetime value: '14:45:00',在我确认时间没有打错的情况下想到了格式可能存在问题,遂记录。废话不多说,翠花上八股!

在说这个问题之前,我们需要先了解一下——MySQL的数据类型

数据类型

MySQL 支持所有标准 SQL 数值数据类型,大体分为三类:数值、日期/时间和字符串(字符)类型

数值

数值类型大类又可以分为整型、浮点型、定点型三小类。

小结:浮点型包括单精度浮点型(float)和双精度浮点型(double),能够表示小数和较大范围的数值,但对精度要求不是特别严格可能存在舍入误差;

定点型(decimal)通常使用十进制定点表示法,可以指定精确的小数位数和范围,不会出现舍入误差适用于需要精确表示小数位数或者对精度要求较高的场景。比如涉及财务数据、精确计算或需要保证精度的情况,建议使用定点型,以避免浮点数运算带来的舍入误差。

日期

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

小结:如果只关心年、月和日,并且不需要考虑具体的时间,比如存储生日、会议日期、订单日期等,那么使用日期类型是更合适的选择;

时间戳通常以 UNIX 时间(自1970年1月1日以来经过的秒数或毫秒数)的形式表示,如果你需要存储精确到秒或毫秒的时间信息,或者需要进行时间计算和排序,比如记录事件发生的精确时间、测量时间间隔等,那么使用时间戳是更合适的选择。

字符串

BLOB 类型主要用于存储二进制大对象,例如可以存储图片,音视频等文件。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。

也有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。

  • CHAR:表示定长字符串,需要指定固定长度,每个字符占用相同的空间大小,如果实际存储的字符串长度小于该长度,则用空格进行填充,因此 CHAR 类型的存储空间是固定的,可以提高查询的效率,适合1.存储的字符串长度基本相等或差别不大;2.存储的数据很少更新;3.存储的是定长字符串,比如电话号码、身份证号等,建议使用 CHAR 类型。

  • VARCHAR:表示变长字符串,不需要指定固定长度,根据实际存储的字符串长度分配存储空间,占用的空间大小与存储的字符串长度有关,因此 VARCHAR 类型的存储空间是可变的,节省存储空间,适合1.存储的字符串长度差别较大;2.存储的数据经常要被更新;3.存储的是变长字符串,比如地址、用户名等。

这里多说两点:大多数字符集(如 ASCII、UTF-8),一个字符(即字母、数字、标点符号、空格以及其他符号)通常占用一个字节的存储空间。在 MySQL 中,默认使用的字符集是 UTF-8(UTF-8(Unicode Transformation Format-8)是 Unicode 的一种变长字符编码方案,它可以用来表示任何 Unicode 字符,并且兼容 ASCII 编码)它是一种多字节字符集,其中大多数字符只占用一个字节,但一个汉字通常由三个字节表示。

第二点:如果存储的字符串长度超过了指定的长度,在插入数据时会报错!

不忘初心

在了解了Mysql的数据类型后,还记得我们开头的问题吗?

就是因为表time字段存储的格式和我的时间字符串不匹配,所以没搜到!那么我怎么才能查到数据呢?

解决方法

第一个方法:匹配插入时候的数据类型即datatime时间混合日期值2023-10-14 14:45:00

第二个方式就是MySQL日期格式化函数date_format(date, format)

-- 参数:date - 要格式化的日期,format - 指定的格式

SELECT * FROM 表 WHERE DATE_FORMAT(time, '%H:%i:%s') = '14:45:00'

All right,希望大家下次插入数据或者查询的时候要注意喔~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值