powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Изменение типа атрибута (VARCHAR в DATETIME)
14 сообщений из 14, страница 1 из 1
Изменение типа атрибута (VARCHAR в DATETIME)
    #39844591
EvgenSanich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, Господа!

Подскажите пожалуйста, возможные варианты решения следующей задачи. Из лог-файла (формат *.csv) загружаю данные в таблицу БД MS SQL для последующего анализа. Загрузку делаю с помощью скрипта (в данном случае не использую матер импорта), создаю таблицу с атрибутами типа VARCHAR и данные успешно импортируются в нее.

Далее, мне необходимо изменить типа атрибута (VARCHAR) для столбца "EventDateTime" на тип DATETIME. После импорта данных из лог-файла, записи в данном столбце имеют вид: 07.06.2019 9:10:40

Запрос на изменение типа следующий:

Код: sql
1.
ALTER TABLE MyLogDB.dbo.MyLog ALTER COLUMN EventDateTime DATETIME



Результат запроса:

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

Правильно я понимаю, что записи не соответствуют формату требуемого типа, в моем случае это DATETIME?

Следовательно, перед тем как выполнить запрос на изменение типа аргумента (VARCHAR в DATETIME), необходимо изменить (преобразовать) записи в столбце "EventDateTime", то есть привести в определенный вид, удалить все точки и что то еще... Вот собственно тут у меня и возникает вопрос, что можно сделать?

Заранее благодарю за помощь!
...
Рейтинг: 0 / 0
Изменение типа атрибута (VARCHAR в DATETIME)
    #39844607
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
set language russian;
ALTER TABLE MyLogDB.dbo.MyLog ALTER COLUMN EventDateTime DATETIME
...
Рейтинг: 0 / 0
Изменение типа атрибута (VARCHAR в DATETIME)
    #39844611
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никогда так не делай

Код: sql
1.
2.
set language german;
ALTER TABLE MyLogDB.dbo.MyLog ALTER COLUMN EventDateTime DATETIME



Конвертировать надо ЯВНО.
Код: sql
1.
convert( datetime, '07.06.2019 9:10:40', 104)
...
Рейтинг: 0 / 0
Изменение типа атрибута (VARCHAR в DATETIME)
    #39844613
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отконвертировать можно как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
WITH CTE AS
(
   SELECT '07.06.2019 9:10:40'AS TT
    UNION ALL
   SELECT '01.08.2019 7:23:18'AS TT
)
SELECT C.TT,CONVERT(DATE,C.TT,104)AS Conv
FROM CTE AS C;
...
Рейтинг: 0 / 0
Изменение типа атрибута (VARCHAR в DATETIME)
    #39844623
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
londiniumОтконвертировать можно как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
WITH CTE AS
(
   SELECT '07.06.2019 9:10:40'AS TT
    UNION ALL
   SELECT '01.08.2019 7:23:18'AS TT
)
SELECT C.TT,CONVERT(DATE,C.TT,104)AS Conv
FROM CTE AS C;

Только не к типу DATE!
...
Рейтинг: 0 / 0
Изменение типа атрибута (VARCHAR в DATETIME)
    #39844643
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222Конвертировать надо ЯВНО.Вместо одного alter, зафигачить два. Плюс update, плюс переименование столбца.
Гениально!
...
Рейтинг: 0 / 0
Изменение типа атрибута (VARCHAR в DATETIME)
    #39844660
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmaleks222Конвертировать надо ЯВНО.Вместо одного alter, зафигачить два. Плюс update, плюс переименование столбца.
Гениально!И все это вместо того, чтобы сконвертировать дату еще до вставки.
...
Рейтинг: 0 / 0
Изменение типа атрибута (VARCHAR в DATETIME)
    #39844690
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvgenSanich,

PARSE ( string_value AS data_type [ USING culture ] )
...
Рейтинг: 0 / 0
Изменение типа атрибута (VARCHAR в DATETIME)
    #39844831
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич]И все это вместо того, чтобы сконвертировать дату еще до вставки.

Да да да!
Определиться с форматами до и после.
А то непонятно, это первое августа или 8 января.
...
Рейтинг: 0 / 0
Изменение типа атрибута (VARCHAR в DATETIME)
    #39844906
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевичinvmпропущено...
Вместо одного alter, зафигачить два. Плюс update, плюс переименование столбца.
Гениально!И все это вместо того, чтобы сконвертировать дату еще до вставки.
До вставки - лучше.
Но засада, если есть кривые даты.
И есть желание их сберечь.
...
Рейтинг: 0 / 0
Изменение типа атрибута (VARCHAR в DATETIME)
    #39845064
EvgenSanich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищи, пытаюсь осмыслить конструкцию и не пойму, каким образом ее применить для всех значений определенного столбца в таблице:

Код: sql
1.
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )



Пробовал проделать для отдельно взятого значения:

Код: sql
1.
2.
3.
DECLARE @testval varchar(255);
SET @testval = '07.06.2019 10:00:47';
SELECT CAST(@testval AS datetime)



Результат в целом себя оправдывает, но как запилить целостную конструкцию для всего столбца, not understand:(
...
Рейтинг: 0 / 0
Изменение типа атрибута (VARCHAR в DATETIME)
    #39845068
EvgenSanich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EvgenSanich,

эта милая строчка
Код: sql
1.
SELECT CAST(MyTable AS TIME) FROM MyLog

выдает такую ошибку:

Ошибка преобразования даты или времени из символьной строки.
...
Рейтинг: 0 / 0
Изменение типа атрибута (VARCHAR в DATETIME)
    #39845098
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvgenSanichEvgenSanich,

эта милая строчка
Код: sql
1.
SELECT CAST(MyTable AS TIME) FROM MyLog


выдает такую ошибку:

Ошибка преобразования даты или времени из символьной строки. Интересно. Пытаетесь осмыслить CONVERT (так и надо!), а применяете CAST!

Рассмотрите также TRY_CONVERT() в последних версиях MSSQL.
Для разбирательства с ошибочным написанием исходных дат.
...
Рейтинг: 0 / 0
Изменение типа атрибута (VARCHAR в DATETIME)
    #39845100
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapEvgenSanichEvgenSanich,

эта милая строчка
Код: sql
1.
SELECT CAST(MyTable AS TIME) FROM MyLog



выдает такую ошибку:

Ошибка преобразования даты или времени из символьной строки. Интересно. Пытаетесь осмыслить CONVERT (так и надо!), а применяете CAST!

Рассмотрите также TRY_CONVERT() в последних версиях MSSQL.
Для разбирательства с ошибочным написанием исходных дат.Однако, MyTable (очень подозрительное для времени имя!) какого типа?
И в каком виде там хранится время?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Изменение типа атрибута (VARCHAR в DATETIME)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]