Я знаю, что SQL Server date
datatype определен как диапазон от 0001-01-01 до 9999-12-31. Есть ли способ получить эти значения с использованием T-SQL без использования магических чисел (например, без чего-то вроде declare @MaxDate date = '12/31/9999'
)?SQL Server: получите максимальную/минимальную дату без магических чисел
ответ
Вы определенно не можете получить максимум, но я также только что узнал, что вы тоже не можете получить минимум.
Вы можете сделать это с типом даты и времени:
SELECT CAST(0 AS datetime)
--returns 1900-01-01 00:00:00.000
Но вы не можете сделать это с типом дата:
SELECT CAST(0 AS date)
--returns Msg 529, Level 16, State 2, Line 1
--Explicit conversion from data type int to date is not allowed.
Жаль. Нечетный выбор, все рассмотренное - намерение довольно очевидно. Похоже, что максимум [недоступен] (http://stackoverflow.com/questions/548353/finding-max-possible-date-in-ms-sql-server-2005) ... – Conduit
Существует своего рода кружным путем получения. Но вы могли бы сделать это:
DECLARE @dateHighest nvarchar(400), @dateLowest nvarchar(400)
SET @dateHighest = 'powershell.exe ((([System.Data.SqlTypes.SqlDateTime]::MaxValue).Value).ToString(\""MM/dd/yyyy\""))'
SET @dateLowest = 'powershell.exe ((([System.Data.SqlTypes.SqlDateTime]::MinValue).Value).ToString(\""MM/dd/yyyy\""))'
DECLARE @useTopDate table
(
highestDate date
)
DECLARE @useBottomDate table
(
lowestDate date
)
INSERT INTO @useBottomDate EXEC xp_cmdshell @dateLowest
INSERT INTO @useTopDate EXEC xp_cmdshell @dateHighest
SELECT TOP 1 * From @useTopDate, @useBottomDate
Если вам это нужно в Хранимой Proc или функции, вы можете использовать его позже.
Это получит CLR мин/макс, не обязательно для SQL Server. –
@ DanField, yep согласно примечанию в конце, но в большинстве случаев они должны быть одинаковыми, просто не уверены в этом случае для этого. –
Они не совпадают для MinValue в 'Datetime' (но они предназначены для« даты »). Это может сработать лучше, если вы запустили свой PS в '' powershell.exe (([System.Data.SqlTypes.SqlDateTime] :: MaxValue ... »и MinValue. См. Http://stackoverflow.com/questions/3310569/what -is-the-value-of-1-1-1753-in-sql-server –
Так это не работает без номеров магии, но если вам нужны функции (я использовал шестигранное обозначение, как это немного более компактные и легкие для чтения для чисел это большое)
SELECT CAST(CAST(CAST(0x2D247f AS BIGINT) AS DATETIME) AS DATE) --, CAST(0x2D247f AS BIGINT)
SELECT CAST(CAST(CAST(0xD1BA AS BIGINT) * -1 AS DATETIME) AS DATE) --, CAST(0xD1BA AS BIGINT) * -1
Хотя, на нижний конец, SQL Server позволит 1/1/1:
SELECT CAST('0001-01-01' AS DATE)
Но не отрицательные даты (например, BC).
- 1. Избавление от «магических» чисел в SQL Server
- 2. Централизовать div, без магических чисел
- 3. Работа с IComparable.Compare без магических чисел
- 4. Избегание магических чисел без создания зависимостей
- 5. Как избежать магических чисел?
- 6. SQL: избегая жесткого кодирования или магических чисел
- 7. Необходимость объяснения некоторых магических чисел
- 8. Избегание магических строк и чисел
- 9. Избегание магических чисел в Phaser.io
- 10. Выбрать дату без времени (SQL Server (+)
- 11. SQL Server: получите дату с параметрами год, неделя, день недели
- 12. Как избавиться от магических чисел в Java
- 13. Что использовать вместо магических чисел в C
- 14. Как избавиться от фона магических чисел
- 15. магических чисел в Linux перезагрузки() системного вызова
- 16. Поиск магических чисел с использованием NDepend
- 17. Получите дату понедельника понедельника
- 18. Получите информацию о подключении SQL Server из приложения без отладки?
- 19. Как изменить дату SQL Server
- 20. Ошибки SQL Server, удаляющие дату
- 21. sql - получите последнюю дату двух столбцов
- 22. SQL Server - Поиск шаблонов чисел
- 23. Получите полное Datetime, но только по дате. SQL Server
- 24. Сохранить дату в SQL Server без минут и часов
- 25. Цикл SQL Server без курсора
- 26. Как запросить SQL SERVER на текущую дату
- 27. Получите nth weekday из XDate в SQL Server
- 28. Потеря магических чисел в спецификаторах формата printf в формате Java
- 29. Получите дату с qmake
- 30. SQL Server: получите количество и количество столбцов
Что вы подразумеваете под «принуждением этих ценностей»? – Lamak
Получите, извините! Плохой выбор слов - редактирование на мгновение :) – Conduit
Он по-прежнему не уточняет, что вы хотите сделать. Когда вам нужно получить эти ценности? – Lamak