Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
EvgenSanich Member Откуда: Сообщений: 3 |
Доброго времени суток, Господа! Подскажите пожалуйста, возможные варианты решения следующей задачи. Из лог-файла (формат *.csv) загружаю данные в таблицу БД MS SQL для последующего анализа. Загрузку делаю с помощью скрипта (в данном случае не использую матер импорта), создаю таблицу с атрибутами типа VARCHAR и данные успешно импортируются в нее. Далее, мне необходимо изменить типа атрибута (VARCHAR) для столбца "EventDateTime" на тип DATETIME. После импорта данных из лог-файла, записи в данном столбце имеют вид: 07.06.2019 9:10:40 Запрос на изменение типа следующий: 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", то есть привести в определенный вид, удалить все точки и что то еще... Вот собственно тут у меня и возникает вопрос, что можно сделать? Заранее благодарю за помощь! |
2 авг 19, 13:02 [21940614] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9646 |
set language russian; ALTER TABLE MyLogDB.dbo.MyLog ALTER COLUMN EventDateTime DATETIME |
2 авг 19, 13:16 [21940636] Ответить | Цитировать Сообщить модератору |
aleks222 Member Откуда: Сообщений: 1245 |
Никогда так не делайset language german; ALTER TABLE MyLogDB.dbo.MyLog ALTER COLUMN EventDateTime DATETIME Конвертировать надо ЯВНО. convert( datetime, '07.06.2019 9:10:40', 104) |
2 авг 19, 13:18 [21940641] Ответить | Цитировать Сообщить модератору |
londinium Member Откуда: Киев Сообщений: 1195 |
Отконвертировать можно как-то так: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; |
2 авг 19, 13:20 [21940645] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
|
||
2 авг 19, 13:33 [21940668] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9646 |
Гениально! |
||
2 авг 19, 14:35 [21940729] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
|
||||
2 авг 19, 15:03 [21940753] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8353 |
EvgenSanich, PARSE ( string_value AS data_type [ USING culture ] ) |
2 авг 19, 15:46 [21940795] Ответить | Цитировать Сообщить модератору |
Gator Member Откуда: Москва Сообщений: 14980 |
Гавриленко Сергей Алексеевич]И все это вместо того, чтобы сконвертировать дату еще до вставки. Да да да! Определиться с форматами до и после. А то непонятно, это первое августа или 8 января. |
2 авг 19, 20:37 [21940993] Ответить | Цитировать Сообщить модератору |
aleks222 Member Откуда: Сообщений: 1245 |
До вставки - лучше. Но засада, если есть кривые даты. И есть желание их сберечь. |
||||
3 авг 19, 11:07 [21941110] Ответить | Цитировать Сообщить модератору |
EvgenSanich Member Откуда: Сообщений: 3 |
Товарищи, пытаюсь осмыслить конструкцию и не пойму, каким образом ее применить для всех значений определенного столбца в таблице:CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) Пробовал проделать для отдельно взятого значения: DECLARE @testval varchar(255); SET @testval = '07.06.2019 10:00:47'; SELECT CAST(@testval AS datetime) Результат в целом себя оправдывает, но как запилить целостную конструкцию для всего столбца, not understand:( |
4 авг 19, 13:43 [21941527] Ответить | Цитировать Сообщить модератору |
EvgenSanich Member Откуда: Сообщений: 3 |
EvgenSanich, эта милая строчка SELECT CAST(MyTable AS TIME) FROM MyLogвыдает такую ошибку: Ошибка преобразования даты или времени из символьной строки. |
4 авг 19, 13:58 [21941534] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Рассмотрите также TRY_CONVERT() в последних версиях MSSQL. Для разбирательства с ошибочным написанием исходных дат. |
||
4 авг 19, 15:32 [21941571] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
И в каком виде там хранится время? |
||||
4 авг 19, 15:34 [21941573] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |