T-SQL с использованием формата даты с учетом формата сервера SQL - PullRequest
0 голосов
/ 15 октября 2018

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

Select dateadd(HOUR, 24, '2018/10/15 00:00:00')

Это работает на моем локальном SQL Server, но не работает на SQL-Express из-за формата времени, который является итальянским форматом даты.Поэтому я должен написать:

Select dateadd(HOUR, 24, '15/10/2018 00:00:00')

Как объяснить разницу в формате даты двух серверов.Я хотел бы, чтобы мой запрос работал на обоих.Какой синтаксис я должен использовать?

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

При использовании строковых литералов в качестве значений date, time, datetime или datetime2 всегда используйте формат ISO8601 , поскольку SQL Server всегда будет правильно преобразовывать его в соответствующий тип данных.

  • Только для даты, используйте yyyy-mm-dd (2018-10-15)
  • Только для времени, используйте hh:mm:ss (24 часа) (17:33:25)
  • Для даты + времени снова используйте yyyy-mm-ddThh:mm:ss, (24 часа) (2018-10-15T17:33:25)
0 голосов
/ 15 октября 2018

Я предлагаю вам другой подход, который может быть полезен, когда ваши шансы стандартизировать ввод ограничены: помимо любой конкретной культуры на SQL Server, вы можете установить формат даты для всей команды, который применяется только к последующим командам, используя SET DATEFORMAT.

Например.

SET DATEFORMAT ymd; 
Select dateadd(HOUR, 24, '2018/10/15 00:00:00')

SET DATEFORMAT dmy; 
Select dateadd(HOUR, 24, '15/10/2018 00:00:00')

Вы можете использовать различные форматы, переключая символы y (год), * ​​1008 * (месяц) и d (день).

Ссылка: SET DATEFORMAT

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...