如何在MySQL 2008中将指定日期字符串转为MM/DD/YYYY HH:MM:SS AM格式并插入表
首先得澄清个小误区:MySQL并没有2008这个版本号哦,你可能是把它和SQL Server 2008搞混啦!不过没关系,我分别针对两种数据库场景给你讲清楚怎么处理~
先说说核心逻辑:不管是哪种数据库,日期时间类型(比如MySQL的DATETIME、SQL Server的DATETIME)本身没有固定显示格式——它是按数值形式存储的,格式只是我们查询或插入时的字符串表现形式。你的需求其实分两步:一是把源字符串转成数据库能识别的日期时间类型(方便规范存储),二是如果需要以MM/DD/YYYY HH:MM:SS AM的格式输出或存储为字符串,再做格式化。
情况1:如果你用的是MySQL
1. 把源字符串转成DATETIME类型存储
你的源字符串'2016-06-27 05:29:39'刚好是MySQL默认支持的DATETIME输入格式,用STR_TO_DATE函数可以明确转换(避免格式歧义):
STR_TO_DATE('2016-06-27 05:29:39', '%Y-%m-%d %H:%i:%s')
结合你的插入场景,修改后的语句可以写成:
INSERT INTO dbo.ps_mnd_reqeng_sc_projectsummary (logged_date) SELECT STR_TO_DATE(dt_logged, '%Y-%m-%d %H:%i:%s') FROM DATA_FORM_VALUES_1125505;
这样插入的就是标准的DATETIME类型,后续查询时可以按需格式化。
2. 格式化为MM/DD/YYYY HH:MM:SS AM的字符串
如果你的目标字段是字符串类型(不推荐,还是用日期类型存储更合理),或者需要查询时输出这个格式,用DATE_FORMAT函数:
DATE_FORMAT(STR_TO_DATE('2016-06-27 05:29:39', '%Y-%m-%d %H:%i:%s'), '%m/%d/%Y %h:%i:%s %p')
对应的格式符说明:
%m:两位月份(01-12)%d:两位日期(01-31)%Y:四位年份%h:12小时制的小时(01-12)%i:两位分钟(00-59)%s:两位秒数(00-59)%p:自动显示AM/PM标识
情况2:如果你实际用的是SQL Server 2008
1. 转成DATETIME类型存储
SQL Server 2008可以直接用CAST或CONVERT转换:
CAST('2016-06-27 05:29:39' AS DATETIME) -- 或者指定格式代码120(对应YYYY-MM-DD HH:MI:SS) CONVERT(DATETIME, '2016-06-27 05:29:39', 120)
插入语句改成:
INSERT INTO dbo.ps_mnd_reqeng_sc_projectsummary (logged_date) SELECT CONVERT(DATETIME, dt_logged, 120) FROM DATA_FORM_VALUES_1125505;
2. 格式化为MM/DD/YYYY HH:MM:SS AM的字符串
SQL Server 2008没有FORMAT函数(2012及以上版本才支持),所以得用拼接方式实现:
SELECT RIGHT('0' + CAST(MONTH(dt_logged) AS VARCHAR), 2) + '/' + RIGHT('0' + CAST(DAY(dt_logged) AS VARCHAR), 2) + '/' + CAST(YEAR(dt_logged) AS VARCHAR) + ' ' + CONVERT(VARCHAR(8), dt_logged, 108) + ' ' + CASE WHEN DATEPART(HOUR, dt_logged) < 12 THEN 'AM' ELSE 'PM' END FROM DATA_FORM_VALUES_1125505;
如果是插入字符串字段,把这段查询放到INSERT语句里即可。
内容的提问来源于stack exchange,提问作者Gaurav Kanodia
相关产品推荐
相关产品推荐

