Гость
Map
Форумы / Microsoft SQL Server [закрыт для гостей] / cmd, sqlcmd, %date% %time% to MS SQL datetime / 15 сообщений из 15, страница 1 из 1
08.07.2022, 11:28
    #82342
Просто Трёп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cmd, sqlcmd, %date% %time% to MS SQL datetime
Попался в ловушку, в которую ловился лет 15 лет назад и совсем про нее забыл.

7 июля (2022-07-07) во второй половине дня запилил два батника, которые закидывали данные в MS SQL Server с помощью sqlcmd. В процедуре было поле datetime, в скрипте я его формировал через переменные %date% и %time%, в одном месте между ними поставил пробел, в другом - "T". Запятую перед долями секунды менял на точку. Проверил все командой эхо, все было норм.

Утром смотрю - какая-то фигня. Из одного источника данных с полуночи вообще нет, из другого - уползли в другой месяц. В общем, правильное решение:

1. В региональных параметрах пользователя, из-под которого будет запускаться скрипт, формат даты в обоих местах должен быть "yyyy-MM-dd".
2. Формат времени "HH:mm:ss" для cmd работает не так, как надо, он все равно до 10 утра будет ставить пробел вместо начального ноля. Поэтому в скрипте меняем пробел на ноль и запятую на точку. Буква "T" между датой и временем нужна, чтобы скуль точно знал, о каком формате идет речь и не вздумал месяц с датой местами поменять.
Код
1.
2.
3.
4.
5.
set tm=%time%
set tm=%tm: =0%
set tm=%tm:,=.%
set dt=%date%T%tm%
sqlcmd .... -Q "exec dbo.putitem '%dt%', .....".....
...
Изменено: 08.07.2022, 11:29 - Просто Трёп
Рейтинг: 1 / 0
Нравится: Гарыныч
08.07.2022, 11:51
    #82365
PaNik
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cmd, sqlcmd, %date% %time% to MS SQL datetime
Просто Трёп  08.07.2022, 11:28
[игнорируется]
чтобы скуль точно знал, о каком формате идет речь и не вздумал месяц с датой местами поменять...
нужно дату писать в формате "yyyyMMdd"
...
Рейтинг: 0 / 0
08.07.2022, 12:07
    #82386
Просто Трёп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cmd, sqlcmd, %date% %time% to MS SQL datetime
PaNik  08.07.2022, 11:51
[игнорируется]
Просто Трёп  08.07.2022, 11:28
[игнорируется]
чтобы скуль точно знал, о каком формате идет речь и не вздумал месяц с датой местами поменять...
нужно дату писать в формате "yyyyMMdd"
Это если тебе формат date нужен. Для даты это универсально и гарантированно никаких разночтений не будет.

А если datetime, то как я написал.
...
Рейтинг: 0 / 0
08.07.2022, 12:18
    #82395
PaNik
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cmd, sqlcmd, %date% %time% to MS SQL datetime
Просто Трёп  08.07.2022, 12:07
[игнорируется]
PaNik  08.07.2022, 11:51
[игнорируется]
Просто Трёп  08.07.2022, 11:28
[игнорируется]
чтобы скуль точно знал, о каком формате идет речь и не вздумал месяц с датой местами поменять...
нужно дату писать в формате "yyyyMMdd"
Это если тебе формат date нужен. Для даты это универсально и гарантированно никаких разночтений не будет.

А если datetime, то как я написал.
да ты шо?
изображение_2022-07-08_121832440.png
...
Рейтинг: 0 / 0
08.07.2022, 12:25
    #82401
Горбатый ёж
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cmd, sqlcmd, %date% %time% to MS SQL datetime
PaNik [игнорируется] 

Он на 09 часов спотыкается :)
...
Рейтинг: 0 / 0
08.07.2022, 13:40
    #82471
Просто Трёп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cmd, sqlcmd, %date% %time% to MS SQL datetime
Я в явном виде cast или convert не использовал. Сейчас попробую повторить ошибку.
...
Рейтинг: 0 / 0
08.07.2022, 13:44
    #82475
Просто Трёп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cmd, sqlcmd, %date% %time% to MS SQL datetime
PaNik  08.07.2022, 12:18
[игнорируется]
Просто Трёп  08.07.2022, 12:07
[игнорируется]
PaNik  08.07.2022, 11:51
[игнорируется]
Просто Трёп  08.07.2022, 11:28
[игнорируется]
чтобы скуль точно знал, о каком формате идет речь и не вздумал месяц с датой местами поменять...
нужно дату писать в формате "yyyyMMdd"
Это если тебе формат date нужен. Для даты это универсально и гарантированно никаких разночтений не будет.

А если datetime, то как я написал.
да ты шо?
изображение_2022-07-08_121832440.png
20220708 9:14:00.000 - это внутренняя фича скуля.
2022-07-08T13:42:17.675 - это мировой стандарт, про который знает скуль.
...
Рейтинг: 0 / 0
08.07.2022, 13:49
    #82479
Просто Трёп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cmd, sqlcmd, %date% %time% to MS SQL datetime
Что его можно использовать в date, я знал, но использовать его в datetime мне казалось нелогичным.
...
Рейтинг: 0 / 0
25.08.2022, 18:26
    #125903
Администратор
Администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cmd, sqlcmd, %date% %time% to MS SQL datetime
Тема была перенесена из форума 'Вопросы по IT'.
...
Администратор:
Тема была перенесена из форума 'Вопросы по IT'.
Рейтинг: 0 / 0
25.08.2022, 21:58
    #126109
cat2
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гесты и игнорируемые идут по CSS
cmd, sqlcmd, %date% %time% to MS SQL datetime
Просто Трёп  08.07.2022, 13:49
[игнорируется]
Что его можно использовать в date, я знал, но использовать его в datetime мне казалось нелогичным.
Раньше никаких Date не было. Одни сплошные DateTime
...
Рейтинг: 0 / 0
29.08.2022, 19:26
    #130987
Дед-Папыхтет
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cmd, sqlcmd, %date% %time% to MS SQL datetime
Просто Трёп [игнорируется] 

строка в дату или дата в строку лучше всего преобразовывать функцией convert с 3мя параметрами. 3й параметр как раз формат строки входящей/исходящей.
...
Рейтинг: 1 / 0
Нравится: Просто Трёп
30.08.2022, 01:04
    #131118
PaNik
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cmd, sqlcmd, %date% %time% to MS SQL datetime
Дед-Папыхтет  29.08.2022, 19:26
[игнорируется]
Просто Трёп [игнорируется] 

строка в дату или дата в строку лучше всего преобразовывать функцией convert с 3мя параметрами. 3й параметр как раз формат строки входящей/исходящей.
Чому нi 'format'?
...
Рейтинг: 0 / 0
30.08.2022, 08:50
    #131199
Дед-Папыхтет
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cmd, sqlcmd, %date% %time% to MS SQL datetime
PaNik  30.08.2022, 01:04
[игнорируется]
Дед-Папыхтет  29.08.2022, 19:26
[игнорируется]
Просто Трёп [игнорируется] 

строка в дату или дата в строку лучше всего преобразовывать функцией convert с 3мя параметрами. 3й параметр как раз формат строки входящей/исходящей.
Чому нi 'format'?
Формат только в строку. Из строки в дату не получится
...
Рейтинг: 0 / 0
30.08.2022, 09:02
    #131218
Дед-Папыхтет
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cmd, sqlcmd, %date% %time% to MS SQL datetime
Ну к примеру в csv поле d пришло в виде даты в основном даты в формате гггг.мм.дд но встречаются и в формате дд.мм.гггг в одном файле
Использую

select coalesce(
try_convert(date,d,102),
try_convert(date,d,104)
)

...
...
Изменено: 30.08.2022, 09:02 - Дед-Папыхтет
Рейтинг: 1 / 0
Нравится: PaNik
30.08.2022, 09:06
    #131223
PaNik
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cmd, sqlcmd, %date% %time% to MS SQL datetime
Дед-Папыхтет  30.08.2022, 09:02
[игнорируется]
Ну к примеру в csv поле d пришло в виде даты в основном даты в формате гггг.мм.дд но встречаются и в формате дд.мм.гггг в одном файле
Использую

select coalesce(
try_convert(date,d,102),
try_convert(date,d,104)
)

...
c csv - да, и похуже проблемы бывали
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [закрыт для гостей] / cmd, sqlcmd, %date% %time% to MS SQL datetime / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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