解决思路:把查出来的字符串格式化一下
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;
这个查询的工作方式是:
- 使用
STR_TO_DATE
函数将你的数字转换为一个日期时间值。‘%Y%m%d%H%i%s’ 是一个格式字符串,它告诉MySQL如何解析数字。在这个例子中,‘%Y’是四位数年份,’%m’是月份,‘%d’是日期,’%H’是小时,‘%i’是分钟,’%s’是秒。 - 然后,使用
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条件错误