Как применить определенный формат даты в T-SQL? - PullRequest
1 голос
/ 08 декабря 2010

У меня есть таблица, которая содержит записи со столбцом DATETIME. Я пишу хранимый процесс, который возьмет startTime и endTime и вернет все записи между этими двумя моментами. Я хочу заставить пользователей указывать время в определенном формате («ГГГГ-ММ-ДД Чт: мм: сс.ннн»). Причина в том, что моя таблица не содержит много записей, и я не хочу ограничивать получение данных двумя моментами времени только в один и тот же день (поэтому они должны предоставлять время с точностью до секунд)

Есть ли способ обеспечить это?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 08 декабря 2010

Да, но тогда вы должны принимать параметры в виде строк (varchar) вместо datetime, поскольку значения datetime 2010-12-08 и 2010-12-08 00:00:00.000 совпадают.

Вы можете проверить, что длина входных строк соответствует требованию, а затем преобразовать их в datetime, используя convert(datetime, startTime, 126).

1 голос
/ 08 декабря 2010

Вы имеете в виду что-то вроде:

IF   @arg NOT LIKE    '19[0-9][0-9]-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]'
 AND @arg NOT LIKE '2[01][0-9][0-9]-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]'
RAISERROR('Wrong format', 10, 1)

?

Только если @arg передается как строка курса.

1 голос
/ 08 декабря 2010

Вы можете принудительно указать конкретный формат, только если вы принимаете строку в качестве даты - тогда вы можете попытаться проанализировать эту строку с вашим форматом, и если она не удастся, вы получите ошибку.

Но если ваш сохраненный процесспринимает переменную DATETIME, здесь нет «формата» - это просто переменная со значением.

0 голосов
/ 08 декабря 2010

Пока пользователи предоставляют любой допустимый формат даты, вы должны принять его. Научитесь использовать CAST и CONVERT вместо этого:

http://msdn.microsoft.com/en-us/library/ms187928.aspx

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