Объедините разные столбцы даты и времени, чтобы создать один столбец с форматом даты / времени в Oracle SQL

#oracle #oracle-sqldeveloper #sqldatatypes

#Oracle #oracle-sqldeveloper #sqldatatypes

Вопрос:

Я работаю с базой данных, в которой у меня есть таблица встреч. С двумя столбцами

 ApptDate ApptTime
9/26/21  9:00 AM
9/25/20  1:00 PM
 

Я хочу удалить столбец ApptTime после создания столбцов ApptDate в качестве столбца ApptDateTime.
Я попытался объединить, но не могу понять, как я могу изменить тип данных столбца 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
);
 

Но я получил сообщение об ошибке, что тип данных может быть изменен только для пустой таблицы.
Пожалуйста, предложите.

Комментарии:

1. Да, вы не можете изменить VARCHAR2 на СЕГОДНЯШНИЙ ДЕНЬ. Вам нужно будет создать временный 3-й столбец в качестве ДАТЫ и присвоить преобразованные строковые значения, затем удалить 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 — дата, затем используйте следующий блок кода
 /*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