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

Подскажите пожалуйста, возможные варианты решения следующей задачи. Из лог-файла (формат *.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
02.08.2019, 13:16
    #39844607
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение типа атрибута (VARCHAR в DATETIME)
Код: sql
1.
2.
set language russian;
ALTER TABLE MyLogDB.dbo.MyLog ALTER COLUMN EventDateTime DATETIME
...
Рейтинг: 0 / 0
02.08.2019, 13:18
    #39844611
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение типа атрибута (VARCHAR в DATETIME)
Никогда так не делай

Код: 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
02.08.2019, 13:20
    #39844613
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение типа атрибута (VARCHAR в DATETIME)
Отконвертировать можно как-то так:
Код: 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
02.08.2019, 13:33
    #39844623
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение типа атрибута (VARCHAR в DATETIME)
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
02.08.2019, 14:35
    #39844643
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение типа атрибута (VARCHAR в DATETIME)
aleks222Конвертировать надо ЯВНО.Вместо одного alter, зафигачить два. Плюс update, плюс переименование столбца.
Гениально!
...
Рейтинг: 0 / 0
02.08.2019, 15:03
    #39844660
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение типа атрибута (VARCHAR в DATETIME)
invmaleks222Конвертировать надо ЯВНО.Вместо одного alter, зафигачить два. Плюс update, плюс переименование столбца.
Гениально!И все это вместо того, чтобы сконвертировать дату еще до вставки.
...
Рейтинг: 0 / 0
02.08.2019, 15:46
    #39844690
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение типа атрибута (VARCHAR в DATETIME)
EvgenSanich,

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

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

Код: 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
04.08.2019, 13:58
    #39845068
EvgenSanich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение типа атрибута (VARCHAR в DATETIME)
EvgenSanich,

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

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

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

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


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

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

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

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



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

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

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


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