MySQL 将时间戳和时间字符串转换为 DateTime 格式
MySQL convert timestamp and time string to DateTime format
在我的 table 中有两列,一列作为时间戳来保存日期,一列作为时间字符串来保存带句点的时间。
例如:
我想在结果中将它们合并为一列作为 DateTime 格式,然后在该列上按 desc 排序。
示例如下:http://sqlfiddle.com/#!9/25eb21/4
预期的列名称 'Datetime' 是 Datetime 或 timestamps 类型,因此我可以对其进行正确排序。
select addtime(appDate, appTime) from ...
您的 appDate 包含时间,可能是因为您正在应用时区。使用 convert_tz() 将您的两列转换为您的数据应该所在的时区,或者在添加之前使用 date(appDate) 提取它的日期部分。不清楚哪一列是字符串,但 extract() 或 str_to_date() 是将文本解析为日期 and/or 时间的方法。
假设您想要将在列 apptTime
中存储为字符串的持续时间添加到列 apptDate
中的时间戳。
一种典型的方法是使用 str_to_date()
将字符串转换为 datetime
,然后使用 time_to_sec()
将时间部分转换为秒,然后我们可以使用日期将其添加到时间戳中算术。
所以
select t.*
apptdate
+ interval time_to_sec(str_to_date(appttime, '%h:%i %p')) second
as newapptdate
from mytable
您无需将值转换为整数即可将它们相加。 MySQL 具有用于此目的的内置函数:
SELECT *,
addtime(apptDate, str_to_date(apptTime, '%h:%i %p')) as datetime
FROM appt
ORDER BY Datetime DESC;
如果 apptTime
只是一个 time
值(它应该是),那么您显然不需要从字符串转换。我建议修复数据模型。
在我的 table 中有两列,一列作为时间戳来保存日期,一列作为时间字符串来保存带句点的时间。
例如:
我想在结果中将它们合并为一列作为 DateTime 格式,然后在该列上按 desc 排序。
示例如下:http://sqlfiddle.com/#!9/25eb21/4
预期的列名称 'Datetime' 是 Datetime 或 timestamps 类型,因此我可以对其进行正确排序。
select addtime(appDate, appTime) from ...
您的 appDate 包含时间,可能是因为您正在应用时区。使用 convert_tz() 将您的两列转换为您的数据应该所在的时区,或者在添加之前使用 date(appDate) 提取它的日期部分。不清楚哪一列是字符串,但 extract() 或 str_to_date() 是将文本解析为日期 and/or 时间的方法。
假设您想要将在列 apptTime
中存储为字符串的持续时间添加到列 apptDate
中的时间戳。
一种典型的方法是使用 str_to_date()
将字符串转换为 datetime
,然后使用 time_to_sec()
将时间部分转换为秒,然后我们可以使用日期将其添加到时间戳中算术。
所以
select t.*
apptdate
+ interval time_to_sec(str_to_date(appttime, '%h:%i %p')) second
as newapptdate
from mytable
您无需将值转换为整数即可将它们相加。 MySQL 具有用于此目的的内置函数:
SELECT *,
addtime(apptDate, str_to_date(apptTime, '%h:%i %p')) as datetime
FROM appt
ORDER BY Datetime DESC;
如果 apptTime
只是一个 time
值(它应该是),那么您显然不需要从字符串转换。我建议修复数据模型。