mysql中str_ to_ date什么作用?

那天我在一家咖啡店,坐在我旁边的是一位程序员,他盯着电脑屏幕。
屏幕上闪现出各种MySQL函数调用,他嘀咕道:“str_to_date函数真是神奇……”我看了看笔记本,上面有一些关于日期处理的笔记。

MySQL str_to_date函数其实非常实用。
例如,假设您有一个表命令,该命令具有字符串类型的字段 command_date 并存储诸如“2 02 3 -1 0-2 6 1 4 :3 0:00”之类的时间戳。
但如果查询时想直接使用日期函数,例如要计算订单日期和日期,则应将字符串转换为日期类型。
规模 选择订单 ID, str_to_date(order_date, '%Y-%m-%d %H:%i:%s') + INTERVAL 1 日期作为 new_date 来自命令;
这里str_to_date按照指定的格式将字符串解析为日期,然后INTERVAL 1 DAY应该增加一天。
注意格式字符串'%Y-%m-%d %H:%i:%s'必须与实际存储的格式匹配,否则会报错。
但有时直接在数据库中处理日期会更有效。
例如,如果您只想提取年份,请使用 YEAR() 函数: 广场 SELECT order_id, YEAR(from str_to_date(order_date, '%Y-%m-%d %H:%i:%s')) AS 年份 来自命令;
这比处理应用程序层更容易,并且数据库促进了这些任务。
但如果是复杂的时间计算,比如时区切换,还是需要在应用层完成。

等等,还有一件事。
我使用 FROM_UNIXTIME 将时间戳转换为日期,例如: 广场 SELECT FROM_UNIXTIME(1 6 7 3 8 3 5 2 00, '%Y-%m-%d') AS 格式日期;
这会将 UNIX 时间戳(从 1 9 7 0 秒开始)转换为“2 02 3 -01 -01 ”之类的内容。
但要注意时区问题。
如果服务器的时区设置不正确,结果就会失真。
我突然想到,如果数据量特别大,比如几亿条记录,这些功能会不会很慢?在之前的项目中,有数亿条日志。
使用STR_TO_DATE直接查询WHERE子句中的日期范围比先提取然后查询要快。
但如果是复杂的格式,你可能需要先使用 UPDATE 来规范化数据。
MySQL 日期格式它也很常用,例如将日期格式从“yyyy-mm-date”更改为“DD/mm/yyyy”。
广场 SELECT DATE_FORMAT(order_date, '%d/%m/%Y') AS format_date 来自命令;
如果你经常使用这些功能,你会发现自己就像一把瑞士军刀,在任何情况下都能把你割两刀。
但最主要的是如何选择合适的工具。
有时它们简单明了,有时它们应该结合使用。

顺便说一句,还有一个细节。
如果字符串格式不完全正常,例如T中的'2 02 3 -1 0-2 6 T1 4 :3 0:00',STR_TO_DATE可能会报错。
在这种情况下,可以使用STR_TO_DATE(order_date, '%Y-%m-%dT%H:%i:%s'),但最好保持数据格式统一,以减少数据库的负载。

等等,还有一幕。
当您输入数据时,日期字段秒将消失并设置为“2 02 3 -1 0-2 6 1 4 :3 0”。
当使用STR_TO_DATE时,会自动添加00:00:00,结果与原始数据相差3 0分钟。
在这种情况下,您可以使用 STR_TO_DATE(order_date, '%Y-%m-%d %H:%i') 指定仅解析分钟以避免此问题。

MySQL的日期函数使用起来很简单,但是要注意格式、时区和性能。
有时SQL语句写完需要几秒钟,但格式可能是错误的。

话说回来,如果数据量真的很大,需要分库分表,这些函数是不是分布到各个分库去计算呢?还是先用缓存计算结果?这是另一个话题了。

关于SQL语句中日期的处理to_date()的应用

to_date() 函数直接处理日期操作。
严格来说,这意味着将字符串转换为SQL可以识别的日期格式。

我上周刚做一个项目,用这个函数来过滤数据。
例如:
sql 从 t_name 中选择,其中 begin_Date = TO_DATE('2 02 3 -1 0-3 1 00:00:00', 'yyyy-mm-ddhh2 4 :mi:ss')
这将与时间完全匹配。
我通常不推荐嵌套引号,因为很容易出错。

更新数据也是如此。
例如:
java 会话.createSQLQuery( "更新 t_data1 SET by3 =0 WHERE Enter_Type!='X' " + “并且policy_Type=2 并且状态=1 0并且by3 ='2 '” + "AND opera_date >= TO_DATE('" + DateUtil.toString(DateUtil.addDays(new java.util.Date(), -5 )) + "', 'yyyy-MM-dd')" ).executeUpdate();
这里,DateUtil.addDays用于计算5 天前的日期,然后转换为SQL可以识别的格式。
说实话,这种写法有点散漫,但是很管用。

to_date() 就是它的作用,准确的价格比较和过滤。
你自己看看,你明白了吗?