在 Oracle SQL 中组合不同的日期和时间列以创建一个具有日期/时间格式的列
Posted
技术标签:
【中文标题】在 Oracle SQL 中组合不同的日期和时间列以创建一个具有日期/时间格式的列【英文标题】:Combine Different Date and Time Column to make one Column with Date/Time format in Oracle SQL 【发布时间】:2022-01-13 13:15:50 【问题描述】:我正在使用有约会表的数据库。有两列
ApptDate ApptTime
9/26/21 9:00 AM
9/25/20 1:00 PM
我想在将 ApptDate 列设置为 ApptDateTime 列之后删除 ApptTime 列。 我尝试过 concatnate 但我不知道如何将 AppDate 列的数据类型更改为 DATETIME 数据类型并同时更新所有值。 我尝试了以下操作:
ALTER SESSION SET nls_date_format = 'DD-MON-YYYY hh24:mi'
UPDATE Appointment
SET ApptDate = ApptDate ||' ' ||ApptTime;
ALTER TABLE Appointment
MODIFY(
ApptDate DATE
);
但我得到的错误是只能更改空表的数据类型。 请建议。
【问题讨论】:
是的,您不能将 VARCHAR2 更改为 DATE。您需要创建一个临时的第三列作为 DATE 并分配转换后的字符串值,然后删除 ApptDate,并将新列重命名为 AddDate 【参考方案1】: 案例 1:如果 ApptDate 列是字符串类型,则重新创建表并将其填充为/*CREATE TABLE Appointment( ApptDate VARCHAR2(15), ApptTime VARCHAR2(15) );
INSERT INTO Appointment
SELECT '9/26/21','9:00 AM' FROM dual UNION ALL
SELECT '9/25/20','1:00 PM' FROM dual; -- already existing state */
CREATE TABLE Appointment2 AS
SELECT TO_DATE(ApptDate||' '||ApptTime,'MM/DD/RR HH:MI PM') AS ApptDate
FROM Appointment;
DROP TABLE Appointment;
RENAME Appointment2 TO Appointment
案例 2:如果 ApptDate 列的数据类型是 date,则使用以下代码块
/*CREATE TABLE Appointment( ApptDate DATE, ApptTime VARCHAR2(15) );
INSERT INTO Appointment
SELECT date'2021-09-26','9:00 AM' FROM dual UNION ALL
SELECT date'2020-09-25','1:00 PM' FROM dual; -- already existing state */
CREATE TABLE Appointment2 AS
SELECT TO_DATE(ApptDate||' '||ApptTime,'RRRR-MM-DD HH:MI PM') AS ApptDate
FROM Appointment;
DROP TABLE Appointment;
RENAME Appointment2 TO Appointment
Demo
【讨论】:
以上是关于在 Oracle SQL 中组合不同的日期和时间列以创建一个具有日期/时间格式的列的主要内容,如果未能解决你的问题,请参考以下文章
有没有更好的方法来编写这个处理比较两个不同列中的日期的 Oracle SQL?
如果列的值在 Oracle sql 中的格式不同,则使用特定格式更新日期