Oracle 11中截断日期、加1天并添加指定时分的实现方法
实现方案(分主流数据库)
MySQL
假设你的日期时间字段是dt_col(DATETIME/DATE类型),时分字段是time_str(VARCHAR类型,格式为HH:MI):
SELECT DATE_FORMAT( CONCAT(DATE_ADD(DATE(dt_col), INTERVAL 1 DAY), ' ', time_str), '%d/%m/%Y %H:%i' ) AS target_datetime;
步骤解析:
DATE(dt_col):截断日期时间到日期部分(丢弃时分秒)DATE_ADD(..., INTERVAL 1 DAY):给截断后的日期加1天CONCAT(..., ' ', time_str):拼接成完整的日期时间字符串DATE_FORMAT(..., '%d/%m/%Y %H:%i'):格式化为DD/MM/YYYY HH:MI样式
PostgreSQL
同样假设字段为dt_col(TIMESTAMP/DATE类型)和time_str(VARCHAR类型):
SELECT TO_CHAR( DATE_TRUNC('day', dt_col) + INTERVAL '1 day' + time_str::INTERVAL, 'DD/MM/YYYY HH24:MI' ) AS target_datetime;
步骤解析:
DATE_TRUNC('day', dt_col):截断到天级别的时间点(时分秒归零)+ INTERVAL '1 day':日期加1天+ time_str::INTERVAL:将时分字符串转换为时间间隔并叠加TO_CHAR(..., 'DD/MM/YYYY HH24:MI'):格式化输出目标样式
Oracle
假设字段为dt_col(DATE/TIMESTAMP类型)和time_str(VARCHAR类型):
方案1(直接拼接,简洁高效):
SELECT TO_CHAR(TRUNC(dt_col) + 1, 'DD/MM/YYYY') || ' ' || time_str AS target_datetime FROM your_table;
方案2(时间间隔叠加,兼容性更强):
SELECT TO_CHAR( TRUNC(dt_col) + 1 + TO_DSINTERVAL('0 ' || time_str || ':00'), 'DD/MM/YYYY HH24:MI' ) AS target_datetime FROM your_table;
步骤解析:
TRUNC(dt_col):截断DATE类型到日期部分+1:日期加1天- 方案1直接拼接格式化后的日期与时分字符串;方案2通过转换时间间隔叠加,适合时分格式可能变动的场景
注意事项
- 确保
time_str严格为HH:MI的24小时制格式,否则会出现转换或拼接错误 - 如果你的
DATE字段仅存储日期(无时分秒),可省略截断步骤,直接加1天后拼接时分即可
内容的提问来源于stack exchange,提问作者Jonathan Roberts
相关产品推荐
相关产品推荐

