如何处理mysql中的时间戳读取问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何处理mysql中的时间戳读取问题相关的知识,希望对你有一定的参考价值。

参考技术A 1. mysql 获得当前时间戳函数:current_timestamp, current_timestamp()
mysql> select current_timestamp, current_timestamp();

+---------------------+---------------------+
| current_timestamp | current_timestamp() |
+---------------------+---------------------+
| 2008-08-09 23:22:24 | 2008-08-09 23:22:24 |
+---------------------+---------------------+

2. MySQL (Unix 时间戳、日期)转换函数:
unix_timestamp(),
unix_timestamp(date),
from_unixtime(unix_timestamp),
from_unixtime(unix_timestamp,format)

下面是示例:
select unix_timestamp(); -- 1218290027
select unix_timestamp('2008-08-08'); -- 1218124800
select unix_timestamp('2008-08-08 12:30:00'); -- 1218169800

select from_unixtime(1218290027); -- '2008-08-09 21:53:47'
select from_unixtime(1218124800); -- '2008-08-08 00:00:00'
select from_unixtime(1218169800); -- '2008-08-08 12:30:00'

select from_unixtime(1218169800, '%Y %D %M %h:%i:%s %x'); -- '2008 8th August 12:30:00 2008'

3. MySQL 时间戳(timestamp)转换、增、减函数:
timestamp(date) -- date to timestamp
timestamp(dt,time) -- dt + time
timestampadd(unit,interval,datetime_expr) --
timestampdiff(unit,datetime_expr1,datetime_expr2) --

请看示例部分:
select timestamp('2008-08-08'); -- 2008-08-08 00:00:00
select timestamp('2008-08-08 08:00:00', '01:01:01'); -- 2008-08-08 09:01:01
select timestamp('2008-08-08 08:00:00', '10 01:01:01'); -- 2008-08-18 09:01:01

select timestampadd(day, 1, '2008-08-08 08:00:00'); -- 2008-08-09 08:00:00
select date_add('2008-08-08 08:00:00', interval 1 day); -- 2008-08-09 08:00:00

MySQL timestampadd() 函数类似于 date_add()。
select timestampdiff(year,'2002-05-01','2001-01-01'); -- -1
select timestampdiff(day ,'2002-05-01','2001-01-01'); -- -485
select timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00'); -- -12

select datediff('2008-08-08 12:00:00', '2008-08-01 00:00:00'); -- 7

MySQL timestampdiff() 函数就比 datediff() 功能强多了,datediff() 只能计算两个日期(date)之间相差的天数。
参考技术B 1. MySQL 获得当前时间戳函数:current_timestamp, current_timestamp()
mysql> select current_timestamp, current_timestamp();

+---------------------+---------------------+
| current_timestamp | current_timestamp() |
+---------------------+---------------------+
| 2008-08-09 23:22:24 | 2008-08-09 23:22:24 |
+---------------------+---------------------+

2. MySQL (Unix 时间戳、日期)转换函数:
unix_timestamp(),
unix_timestamp(date),
from_unixtime(unix_timestamp),
from_unixtime(unix_timestamp,format)

下面是示例:
select unix_timestamp(); -- 1218290027
select unix_timestamp('2008-08-08'); -- 1218124800
select unix_timestamp('2008-08-08 12:30:00'); -- 1218169800

select from_unixtime(1218290027); -- '2008-08-09 21:53:47'
select from_unixtime(1218124800); -- '2008-08-08 00:00:00'
select from_unixtime(1218169800); -- '2008-08-08 12:30:00'

select from_unixtime(1218169800, '%Y %D %M %h:%i:%s %x'); -- '2008 8th August 12:30:00 2008'

3. MySQL 时间戳(timestamp)转换、增、减函数:
timestamp(date) -- date to timestamp
timestamp(dt,time) -- dt + time
timestampadd(unit,interval,datetime_expr) --
timestampdiff(unit,datetime_expr1,datetime_expr2) --

请看示例部分:
select timestamp('2008-08-08'); -- 2008-08-08 00:00:00
select timestamp('2008-08-08 08:00:00', '01:01:01'); -- 2008-08-08 09:01:01
select timestamp('2008-08-08 08:00:00', '10 01:01:01'); -- 2008-08-18 09:01:01

select timestampadd(day, 1, '2008-08-08 08:00:00'); -- 2008-08-09 08:00:00
select date_add('2008-08-08 08:00:00', interval 1 day); -- 2008-08-09 08:00:00

MySQL timestampadd() 函数类似于 date_add()。
select timestampdiff(year,'2002-05-01','2001-01-01'); -- -1
select timestampdiff(day ,'2002-05-01','2001-01-01'); -- -485
select timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00'); -- -12

select datediff('2008-08-08 12:00:00', '2008-08-01 00:00:00'); -- 7

MySQL timestampdiff() 函数就比 datediff() 功能强多了,datediff() 只能计算两个日期(date)之间相差的天数。

如何处理 Spring Batch 中的 blob 字段?

【中文标题】如何处理 Spring Batch 中的 blob 字段?【英文标题】:How to handle blob field in Spring Batch? 【发布时间】:2020-08-21 17:32:27 【问题描述】:

我需要从 DB 中读取一个 blob 列,然后将其放入一个文件中,反之亦然,使用 Spring Batch。 我该怎么做? 我正在使用 Spring Batch 从 DB 中读取数据并将其放入 CSV 文件中,反之亦然,但现在我还必须管理 blob 数据类型,当它存在时,我需要使用这些数据创建一个文件。

【问题讨论】:

【参考方案1】:

一种方法是使用 LobHandler。您可以使用 (getBlobAsBytes) 将 blob 获取为字节并将其转换为字符串,或者使用 (getBlobAsBinaryStream) 将其转换为 BinaryStream

public class YourRowMapper implements RowMapper<YourObjectType> 
        @Override
        public YourObjectType mapRow(ResultSet resultSet, int i) throws SQLException 

            LobHandler lobHandler = new DefaultLobHandler();
            String value = new String(lobHandler.getBlobAsBytes(resultSet, "COLUMN_NAME"));

            return null;
        
    

希望对你有帮助

【讨论】:

是的,我知道,但我不知道如何使用 blob whit spring batch。你说把这个blob转换成字符串,放到一个文件里? 您是否尝试过将 JdbcCursorItemReader 作为您的阅读器,为它提供 rowMapper。而对于你的作家 FlatFileItemWriter?您的 BLOB 的大小是多少? 单个BLOB的大小可以不同MB,所有blob的总大小也可以超过3GB。 好的,然后尝试在 rowMapper 中使用 getInputStream 并将其设置在您的 Item 中,以及将 InputStream 写入文件的自定义编写器。【参考方案2】:

一般你可以使用byte[]类型字段来呈现blob。它可以依赖于使用什么数据库。

【讨论】:

以上是关于如何处理mysql中的时间戳读取问题的主要内容,如果未能解决你的问题,请参考以下文章

如何处理mysql中的时间戳读取问题

使用 MySQL 的 Grafana 仪表板:我应该如何处理“%Y%m%d%H%i%s”的时间戳以用作面板的时间列?

Powershell - 如何处理非时间戳日志文件条目,包括空行

如何处理谷歌表格脚本中的重复项?

LSTM - 使用 deltaTime 作为功能?如何处理不规则的时间戳?

如何处理未提交的更改