Как получить записи на основе даты?

1

Изображение 174551

У меня есть таблица PersonalInformation в SQL Server 2008. В этой таблице есть столбец CreateDate который хранит дату для вставленной записи. Теперь я хочу искать запись из таблицы в соответствии с датой. Моя строка поиска похожа на Month-Year а CreateDate хранится с использованием функции GETDATE() SQL Server.

Если я использую формат Month-Year, например, March-2012 я хочу, чтобы месяц и год были сопоставлены с табличной записью, а также отображалась запись, введенная до March-2012.

Как я мог это достичь?

Заранее спасибо.

  • 1
    Ваше описание трудно понять, не могли бы вы показать код, к которому оно относится?
  • 0
    Я публикую свою структуру таблицы, чтобы вы лучше поняли #Steve
Теги:
sql-server-2008
gridview

4 ответа

0
Лучший ответ

использовать функцию DATEPART

select  DATEPART(MM,'March 2012') --> 3
select  DATEPART(YYYY,'March 2012')--> 2012

поэтому в вашем запросе поиск

select * from table where DATEPART("MM" CreatedDate) = DATEPART(MM,'March 2012') AND DATEPART("YYY" CreatedDate) = DATEPART(YYY,'March 2012')

таким образом вы можете проверить = или> =, как хотите.

Обратите внимание, что мой ввод - March 2012 а не March-2012. Для замены строки используйте функцию Заменить в своем пути

REPLACE('March-2012','-',' ')

для поиска до даты ввода

select * from table where (DATEPART("MM" CreatedDate) <= DATEPART(MM,'March 2012') AND DATEPART("YYY" CreatedDate) = DATEPART(YYY,'March 2012') OR (DATEPART("YYY" CreatedDate) < DATEPART(YYY,'March 2012')))

для поиска по дате ввода

select * from table where (DATEPART("MM" CreatedDate) > DATEPART(MM,'March 2012') AND DATEPART("YYY" CreatedDate) = DATEPART(YYY,'March 2012') OR (DATEPART("YYY" CreatedDate) > DATEPART(YYY,'March 2012')))
  • 0
    Спасибо, сэр, это решит половину моей проблемы ... но если я использовал <= или> =, он покажет только те записи, которые находятся в месяце марта. Я хочу, чтобы все записи до марта должны были быть опубликованы. @faby
  • 0
    Я отредактировал свой ответ. Дайте мне знать, если это работает
Показать ещё 2 комментария
0

Попробуйте вот так:

SELECT * FROM TableName
WHERE 
CONVERT(varchar(10), DATENAME(MONTH, CreatedDate)) = 'March' // Passed From Parameter
AND Year(CreatedDate) = 2014                                 // Passed From Parameter
  • 0
    и как получить те результаты, которые хранятся до марта 2014 года @Pawan
0

Вам не нужно возиться со строковым представлением данных и использовать эту строку для сравнения.

Я бы предложил сначала DateTime дату ввода на правильный объект DateTime:

var dt = DateTime.ParseExact("March-2012", "MMMM-yyyy", CultureInfo.InvariantCulture);

Затем используйте этот объект DateTime как SqlParameter с SqlDbType.DateTime в вашей SqlCommand для фильтрации на CreatedDate столбца CreatedDate.

0

Выберите * из Tbl_Name, где Convert (varchar, createDate, 110), например '12 -10 '

  • 0
    не дает требуемый вывод @TheTomCat

Ещё вопросы

Сообщество Overcoder
Наверх
Меню