powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Microsoft SQL Server [закрыт для гостей] / cmd, sqlcmd, %date% %time% to MS SQL datetime, Поиск: Искать сообщения, созданные автором: Просто Трёп  
5 сообщений из 5, страница 1 из 1
Microsoft SQL Server / cmd, sqlcmd, %date% %time% to MS SQL datetime
    #82342
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Попался в ловушку, в которую ловился лет 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
Нравится: Гарыныч
Microsoft SQL Server / cmd, sqlcmd, %date% %time% to MS SQL datetime
    #82386
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
PaNik  08.07.2022, 11:51
[игнорируется]
Просто Трёп  08.07.2022, 11:28
[игнорируется]
чтобы скуль точно знал, о каком формате идет речь и не вздумал месяц с датой местами поменять...
нужно дату писать в формате "yyyyMMdd"
Это если тебе формат date нужен. Для даты это универсально и гарантированно никаких разночтений не будет.

А если datetime, то как я написал.
...
Рейтинг: 0 / 0
Microsoft SQL Server / cmd, sqlcmd, %date% %time% to MS SQL datetime
    #82471
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Я в явном виде cast или convert не использовал. Сейчас попробую повторить ошибку.
...
Рейтинг: 0 / 0
Microsoft SQL Server / cmd, sqlcmd, %date% %time% to MS SQL datetime
    #82475
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
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
Microsoft SQL Server / cmd, sqlcmd, %date% %time% to MS SQL datetime
    #82479
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Что его можно использовать в date, я знал, но использовать его в datetime мне казалось нелогичным.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [закрыт для гостей] / cmd, sqlcmd, %date% %time% to MS SQL datetime, Поиск: Искать сообщения, созданные автором: Просто Трёп  
Читали тему (1): Анонимы (1)
Игнорируют тему (1): erbol
Читали форум (1): Анонимы (1)
Пользователи онлайн (101): Анонимы (95), Yandex Bot, Кусь 2 мин., anonymous 2 мин., Разум вселенной 3 мин., Артефакт 3 мин., Просто Трёп 9 мин.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
x
x
Закрыть


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