Преобразование столбца даты и времени в дату и время в формате SQL - PullRequest
0 голосов
/ 20 октября 2019

Я хочу обновить / преобразовать строку даты и времени в SQL-формат даты и времени, т.е. она будет выглядеть точно так же, но она будет считываться не как nvarchar, а как дата и время.

Date            Time
20-10-2019  12:00:00
20-10-2019  11:00:00
20-10-2019  10:00:00
20-10-2019  09:00:00
20-10-2019  08:00:00
20-10-2019  07:00:00

Я собрал эти данные с сайта, используя pandas, преобразовал их в фрейм данных и затем вставил их в MSSQL-сервер, где уже была создана таблица.

Я сделал это до сих пор

SELECT CONVERT (date,'19-10-2019') as Date
SELECT CONVERT (time,'17:00:00',120) as Time;

Но это преобразует только один столбец, тогда как я хотел преобразовать весь столбец и сохранить его как другой другой столбец (я тоже это сделал).

alter table <table_name>
add <col_name> date

alter table <table_name>
add <col_name> time

Может кто-нибудь, пожалуйста, помогите, так как я некоторое время искал в Интернете, и не мог получить соответствующие результаты, и я в основном получаю эту ошибку:

'' 'Преобразованиене удалось преобразовать дату и / или время из символьной строки. '' '

Ответы [ 3 ]

0 голосов
/ 20 октября 2019

Чтобы преобразовать строковую дату или время в формат даты и времени,

SELECT TRY_CONVERT(date, '20-10-2019', 105) as [Date], TRY_CAST('12:00:00' AS TIME) as [Time]

Для обновления

UPDATE table SET datecol = TRY_CONVERT(DATE, DateString, 105), 
                 timecol = TRY_CAST(TimeString AS time)
0 голосов
/ 20 октября 2019

Во-первых, у вас плохие данные в столбцах. Вы должны найти это. Вы можете использовать:

SELECT t.*
FROM t
WHRE TRY_CONVERT(date, t.datecol) IS NULL OR 
     TRY_CONVERT(time, t.timecol) IS NULL;

Примечание. Возможно, вы захотите добавить формат для преобразования date, но если методы по умолчанию работают (как они, кажется, в вашем случае), это может не потребоваться.

Как только данные исправлены или вы решаете, что вас устраивают значения NULL для неверных значений, у вас есть два варианта.

Вы можете добавить вычисляемые столбцы:

alter table t add real_date as (try_convert(date, t.datecol));
alter table t add real_time as (try_convert(time, t.timecol));

Или вы можете изменить столбцы на месте:

-- first convert to default string formats
update t
    set datecol = try_convert(date, t.datecol),
        timecol  = try_convert(time, t.timecol);

-- then alter the types
alter t alter column datecol date;
alter t alter column timecol time;
0 голосов
/ 20 октября 2019

Вы можете конвертировать дату по стилю 105. CAST и CONVERT

CONVERT(DATE, '20-10-2019', 105), CONVERT(TIME, '12:00:00')

И для обновления всех строк

UPDATE table SET NewDateColumn = CONVERT(DATE, [Date], 105), 
                 NewTimeColumn = CONVERT(TIME, [Time])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...