Вопрос

Я пытаюсь вставить значение только для времени, но получаю следующую ошибку

  • пример {"Переполнение SqlDateTime.Должно быть между 1/1/1753 12:00:00 утра и 31/12/9999 11:59:59 вечера."} System.Исключение

Во внешнем интерфейсе время выбирается с помощью элемента управления "TimeEdit" со стрелками вверх и вниз.В таблице в SQL Server поля заданы как smalldatetime.Мне нужно только сохранить время.Я использую следующее для возврата данных в приложение

выберите id, ПРЕОБРАЗУЙТЕ (CHAR(5),TimeFrom, 8)в TimeFrom, ПРЕОБРАЗУЙТЕ (CHAR(5),TimeTo, 8) в TimeTo ИЗ dbo.Доступность где id = @id и dayName = @weekday (день недели)

Как мне скоротать время только за столом?

Редактировать ~ Решение Согласно Эуардо и Крису, мое решение состояло в том, чтобы передать строку datetime вместо строки только по времени.Я отформатировал свой результат в соответствии Формат времени используя букву "g".

Спасибо

Это было полезно?

Решение

Выберите дату, которая находится в диапазоне (например, 1/1/1970), и используйте ее для всего, что вы вставляете.

Другие советы

Вы можете установить дату равной 1/1/1753, которая является минимальным значением даты для datetime в MSSQL, а затем добавить час, который вы хотите сохранить.Конечно, вы должны учитывать это каждый раз, когда вам нужно получить значение, но вы можете обернуть это с помощью некоторых помощников.Или вы можете использовать MSSQL 2008 и использовать новый тип данных TIME.

Если вы отслеживаете только время, подумайте о том, чтобы сохранить его в int как смещение от полуночи с любой необходимой вам степенью детализации (секунды, минуты, часы, ...).Затем вы можете преобразовать его во временной интервал в своем коде, используя соответствующий метод TimeSpan.From??().Чтобы вернуться другим путем, вы можете использовать TimeSpan.Итого??и усеките, если понадобится.Если вам нужно выполнять запросы вручную, вы можете написать SQL-функцию, которая преобразует часы / минуты / секунды в эквивалентное смещение.

Я предпочитаю это использованию datetime и выбору произвольного дня, поскольку это делает назначение поля более ясным, что уменьшает путаницу.

в SQL нет такого понятия, как Время, есть только DateTime.

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

SELECT (GETDATE() - (CAST(FLOOR(CAST(GETDATE() as FLOAT)) AS DateTime)))

где GETDATE() - это дата-время, которое вы хотите отфильтровать.

При установке времени в базе данных вам нужно будет добавить ко времени '01/01/1901' или '01/01/1753'.

Не используйте приведение и преобразование в varchar при работе с datetime, это медленно.Придерживайтесь плавающих числовых операций.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top