Canal adapter同步MySQL到ES,部分时间字段始终同步不过来

1.需要看一下包含_date字段的映射类型,如果是date那么就需要格式化一下,如果不是直接字符串存进去就行了
DATE_FORMAT(a.IN_OUT_DATE, ‘%Y-%m-%d’) as IN_OUT_DATE,
sql中也需要验证包含_date字段同时es中也是date类型的,是否都格式化

2.还有包含time的字段是一样的道理,前提是映射也是date类型
UNIX_TIMESTAMP(DATE_FORMAT(a.AUDIT_TIME, ‘%Y-%m-%d %H:%i:%s’)) * 1000 as AUDIT_TIME,

**

将包含 ‘date’ 的字段使用了 DATE_FORMAT 转换,只需要年月日就行,包含time的字段需要年月日时分秒!!

**
在这里插入图片描述
在这里插入图片描述
解决思路:把查出来的字符串格式化一下

MySQL查出来的20180116120000这个如何转换成2018-01-16
这是一个常见的需求,我们通常在MySQL中使用DATE或DATETIME函数将字符串格式转换为日期或日期时间格式。但是,你的数字并不符合MySQL直接转换的标准格式。你需要先将它转换为标准的日期格式字符串。

假设这个数字存在名为my_column的列中,所在表为my_table,你可以使用以下SQL查询来实现:

SELECT DATE_FORMAT(STR_TO_DATE(my_column, '%Y%m%d%H%i%s'), '%Y-%m-%d') as formatted_date
FROM my_table;

这个查询的工作方式是:

  1. 使用STR_TO_DATE函数将你的数字转换为一个日期时间值。‘%Y%m%d%H%i%s’ 是一个格式字符串,它告诉MySQL如何解析数字。在这个例子中,‘%Y’是四位数年份,’%m’是月份,‘%d’是日期,’%H’是小时,‘%i’是分钟,’%s’是秒。
  2. 然后,使用DATE_FORMAT函数将日期时间值转换为你需要的格式,‘%Y-%m-%d’,其中’%Y’表示四位数年份,‘%m’表示月份,’%d’表示日期。

请注意,这个查询假设你的数字始终代表有效的日期和时间。如果这不是情况,你可能需要更复杂的处理。

然而最好保留时分秒

如果你需要保留时间部分,你可以简单地调整DATE_FORMAT函数的格式字符串以包含时、分、秒。例如,如果你需要格式为 ‘2018-01-16 12:00:00’,你可以使用以下查询:

SELECT DATE_FORMAT(STR_TO_DATE(CRT_TIME, '%Y%m%d%H%i%s'), '%Y-%m-%d %H:%i:%s') as formatted_date
FROM tbl_ps_device_info;

在这个查询中,'%Y-%m-%d %H:%i:%s' 是一个格式字符串,其中 %Y 代表四位数年份,%m 代表月份,%d 代表日期,%H 代表小时,%i 代表分钟,%s 代表秒。因此,DATE_FORMAT函数将日期时间值转换为这种格式。

举个例子:
从tbl_ps_device_info表中查CRT_TIME这个字段

如果你想从tbl_ps_device_info表中查询CRT_TIME字段,并将其转换为日期格式(如 ‘2018-01-16’),你可以使用类似的查询:

SELECT DATE_FORMAT(STR_TO_DATE(CRT_TIME, '%Y%m%d%H%i%s'), '%Y-%m-%d') as formatted_date
FROM tbl_ps_device_info;

这个查询会从tbl_ps_device_info表中获取所有的CRT_TIME记录,然后使用STR_TO_DATE函数将它们转换为日期时间,然后使用DATE_FORMAT函数将日期时间转换为你需要的日期格式。

同样,这个查询假设CRT_TIME始终代表有效的日期和时间。如果可能有无效的日期时间,你可能需要更复杂的处理,例如使用IF函数检查STR_TO_DATE的结果是否为NULL

在这里插入图片描述

最终写成完整SQL:

SELECT 
    info.DEVICE_NO as _id, 
    info.DEVICE_NO, 
    info.DEVICE_NAME, 
    info.DEVICE_TYPE, 
    info.PARK_NO, 
    info.CHNO_NO, 
    info.IF_CONTROL, 
    info.CONTROLTIMES,
    info.STATUS, 
    info.STATUS_CHANGE_TIME, 
    DATE_FORMAT(STR_TO_DATE(info.CRT_TIME, '%Y%m%d%H%i%s'), '%Y-%m-%d %H:%i:%s') as CRT_TIME, 
    info.UPD_TIME, 
    info.OPR_FLAG, 
    info.ITEMID, 
    info.DELETED,
    info.INOUTTYPE, 
    info.IF_DOWN, 
    info.SUB_DEVICE_TYPE, 
    info.ORG_ID 
FROM 
    tbl_ps_device_info info
    --------
    #注意最后的分号也不能写,不然会拼接where条件错误

猜你喜欢

转载自blog.csdn.net/u011197085/article/details/131626315