Предположим, что я создал таблицу и вставить данные, как показано нижеКак конвертировать VARCHAR в DateTime для любого формата в SQL
create table datetimefromat
(
SlNo int identity,
datetimeVarchar varchar(100)
)
go
DECLARE @now datetime
SET @now = GETDATE()
insert into datetimefromat (datetimeVarchar)
values (convert(nvarchar(MAX), @now, 0)),
(convert(nvarchar(MAX), @now, 1)),
(convert(nvarchar(MAX), @now, 3)),
(convert(nvarchar(MAX), @now, 5)),
(convert(nvarchar(MAX), @now, 20)),
(convert(nvarchar(MAX), @now, 13)),
(convert(nvarchar(MAX), @now, 22)),
(convert(nvarchar(MAX), @now, 111));
go
select * from datetimefromat
go
+------+--------------------------+
| SlNo | datetimeVarchar |
+------+--------------------------+
| 1 | Mar 29 2016 12:46PM |
| 2 | 03/29/16 |
| 3 | 29/03/16 |
| 4 | 29-03-16 |
| 5 | 2016-03-29 12:46:32 |
| 6 | 29 Mar 2016 12:46:32:087 |
| 7 | 03/29/16 12:46:32 PM |
| 8 | 2016/03/29 |
+------+--------------------------+
Я хочу, чтобы преобразовать его в обычный DateTime
select
*,
CONVERT(datetime, datetimeVarchar)
from datetimefromat
Но это вызывает ошибку
Msg 242, уровень 16, состояние 3, строка 11
конверсии ти VARCHAR данных pe к типу данных datetime привели к превышению значения.
Как это исправить?
Потому что я хочу, чтобы обновить существующие записи и изменить varchar
столбец datetime
«Как исправить это» - не хранить дату как строку на первом месте? –
Записи 2 и 3 хранятся в формате «dd/mm/yy» и «mm/dd/yy» соответственно. Предполагая, что вы выполнили этот запрос 4 марта, они будут храниться как '04/03/16 'и '03/04/16'. Компьютер не может решить, будет ли это 3 марта или 4 апреля. На самом деле человеку негде это знать ...! –
Предположим, что у вас нет контроля над db (в противном случае не сохраняйте даты как строки, как сказал Митч), эти даты невозможно исправить. Какая дата будет «03-04-2016»? 3 апреля или 4 марта? Если вы не можете сказать, как вы собираетесь интерпретировать это sql-server? – HoneyBadger