#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