如何在SQL插入语句中为日期字段插入含时分秒的完整时间数据
插入带时分秒日期的解决方案
前置检查
首先确认lease_rent_receipts表的due_date字段为支持时分秒的日期类型:
- MySQL:
DATETIME/TIMESTAMP - PostgreSQL:
TIMESTAMP/TIMESTAMPTZ - Oracle:
DATE(Oracle原生DATE类型自带时分秒) - SQL Server:
DATETIME/DATETIME2
如果字段为仅存日期的类型(如MySQL的DATE),需先修改字段类型,否则无法保存时分秒信息。
方案1:l_due_date为日期类型变量
如果变量本身已包含时分秒信息,直接沿用现有插入语句即可,数据库会自动保留完整时间。
如果变量仅含日期部分,需先给变量拼接指定时分秒,不同数据库的处理逻辑如下:
- MySQL
SET l_due_date = STR_TO_DATE(CONCAT(DATE_FORMAT(l_due_date, '%d/%m/%Y'), ' 08:05:25'), '%d/%m/%Y %H:%i:%s');
- PostgreSQL
l_due_date := l_due_date::DATE + INTERVAL '08:05:25';
- Oracle
l_due_date := TRUNC(l_due_date) + INTERVAL '08:05:25' HOUR TO SECOND;
- SQL Server
SET @l_due_date = DATEADD(SECOND, 25, DATEADD(MINUTE, 5, DATEADD(HOUR, 8, CAST(CAST(@l_due_date AS DATE) AS DATETIME))));
方案2:直接插入固定时间字符串
不需要调整变量,直接在VALUES中写入带时分秒的时间即可,示例语句(以你需要的10/10/2021 08:05:25为例):
INSERT INTO lease_rent_receipts (billing_start_date, billing_end_date, charge_category, due_amount, due_date, client_id,total_payable, description) VALUES (l_billing_start_date,l_billing_end_date,l_charge_category, l_due_amount, STR_TO_DATE('10/10/2021 08:05:25', '%d/%m/%Y %H:%i:%s'), l_client_id,l_total_payable, l_description);
以上为MySQL写法,其他数据库对应替换字符串转日期函数即可:
- PostgreSQL:
TO_TIMESTAMP('10/10/2021 08:05:25', 'DD/MM/YYYY HH24:MI:SS')- Oracle:
TO_DATE('10/10/2021 08:05:25', 'DD/MM/YYYY HH24:MI:SS')- SQL Server:
CONVERT(DATETIME, '10/10/2021 08:05:25', 103)
内容的提问来源于stack exchange,提问作者Abinnaya
相关产品推荐
相关产品推荐

