#sql #sql-server-2008
#sql #sql-server-2008
Вопрос:
Можно ли сохранить месяц / год в SQL Server 2008 с обычным datetime? Мне не нужна временная метка, и в столбце будут храниться уникальные комбинации месяцев и лет (т.Е. 10-11, 11-11, 12-11 и т. Д.).
Какие-либо рекомендации?
Ответ №1:
Не зная предполагаемого использования, невозможно дать правильный совет. Однако сохранение месяца и года легко выполнить по крайней мере тремя способами:
- используйте поле даты, но всегда сохраняйте в нем первый день месяца в полночь; затем всегда настраиваемый формат поля даты для отображения
- добавьте целочисленные поля года и месяца и заполните их, разделив дату
- добавьте целочисленное поле, в котором вы кодируете его как год * 100 месяц или какую-либо другую полезную схему
Комментарии:
1. Обратите внимание, что уоллик упоминает тип данных даты в своем первом варианте. Это отличается от поля даты и времени. Все три этих варианта имеют большой смысл.
2. На случай, если вам интересно, как разложить целое число обратно на год / месяц, вот как я это сделал, используя csharp: год = день рождения / 100; день = день рождения % 100;
Ответ №2:
Sql Server сохранит данные даты и времени полностью (год-месяц-день час: мин: сек.миллисекунд), несмотря ни на что.
Когда вы сохраняете свои даты, вы можете сделать день 1-м числом месяца. Просто форматируйте даты так, как вы хотите, когда выполняете свои запросы.
Ответ №3:
Начиная с SQLServer 2008 и далее:
Сохраните как Date
столбец и добавьте следующее ограничение проверки, чтобы убедиться, что значение всегда является первым за месяц:
datepart(month, MyDate)<>datepart(month,dateadd(day, -1, MyDate))
Комментарии:
1. Мне нравится этот подход, но я думаю, что более простое ограничение проверки
DAY(MyDate) = 1
.
Ответ №4:
Вы не можете хранить только год и месяц в столбце DateTime. Ну, что вы можете сделать, так это установить остальные значения по умолчанию. ie: 2011.10.1.1, 2011.11.1.1 вот так.
Или вы можете сохранить его как строку.
Ответ №5:
SELECT RIGHT(CONVERT(VARCHAR(10), GETDATE(), 105), 7) AS [MM-YYYY]
Вы должны попробовать это