Преобразовать строковую дату в формат GETDATE () на сервере SQL - PullRequest
0 голосов
/ 17 января 2020

У нас есть таблица сотрудника со столбцами LastUpdated (datetime), ExitDate (datetime) и ReleaseDate (varchar(50)).

Дата в таблице показана здесь:

+-------------------------+----------------------+
|       LastUpdated       |     ReleaseDate      |
+-------------------------+----------------------+
| 2019-05-24 01:19:21.597 | 4/8/2016 7:00:00 AM  |
| 2019-05-24 02:05:26.130 | 3/20/2007 7:00:00 AM |
| 2019-05-24 01:57:44.810 | 5/14/2007 7:00:00 AM |
| 2019-05-24 01:48:40.483 | 3/16/2010 7:00:00 AM |
| 2019-05-24 01:11:41.290 | 11/8/2018 8:00:00 AM |
+-------------------------+----------------------+

Теперь я хочу преобразовать значения столбца ReleaseDate в формат столбца LastUpdated (yyyy-MM-dd HH:mm:ss) и обновить значение в столбец ExitDate.

Значение столбца LastUpdated было вставлено с использованием GETDATE() на SQL сервере.

Может кто-нибудь помочь с этим, пожалуйста?

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Вы можете использовать update:

update employee
     set ExitDate = convert(datetime, ReleaseDate, 101);

Однако сохранение значения даты в другом формате не рекомендуется.

0 голосов
/ 17 января 2020

Вы можете проанализировать строку до даты, а затем преобразовать дату в строку в нужном формате. Строковые форматы, поддерживаемые для преобразования даты и времени, задокументированы здесь .

Так что-то вроде:

update employee set ReleaseDate = convert(varchar(50), convert(datetime,ReleaseDate, 101), 121);

, если все строки имеют одинаковый формат даты. Если формат даты различается, вы можете попробовать:

update employee set ReleaseDate = convert(varchar(50), convert(datetime,ReleaseDate), 121);

для преобразования с использованием текущих настроек культуры и SQL Разрешительные правила преобразования сервера.

Но затем вам следует изменить тип данных столбца. , если и когда это возможно:

alter table employee alter column ReleaseDate datetime

или добавьте проверочное ограничение, чтобы приложение убедилось, что другой формат не вставлен.

alter table employee add constraint [ck_EnforceReleaseDateFormat_YYYY-MM-DD HH:MM:SS]
check (ReleaseDate = convert(varchar(50), convert(datetime,ReleaseDate, 121), 121))
...