c # дата / время передачи значения на основе текущей даты - PullRequest
2 голосов
/ 12 мая 2010

Я пытаюсь получить записи на основе двух дат с сервера SQL ... Select * from table where CreatedDate between @StartDate and @EndDate и я пропускаю 5/12/2010 и 5/12/2010 (то есть) выбираю записи за сегодня ... У меня 17 записей, датированных 5/12/2010, но ни одна из них не выбрана ....

EDIT: Я использую это, но когда я отлаживаю свое значение, оно показывает 5/12/2010 12:00:00AM

    DateTime baseDate = DateTime.Today;
    var today = baseDate;
    GetBookingReportByDate(today,today);

Я использую их в c # и хранимую процедуру, которую можно использовать повторно, которая принимает startdate и lastdate в качестве параметров,

DateTime baseDate = DateTime.Today;

var today = baseDate;
var yesterday = baseDate.AddDays(-1);
var thisWeekStart = baseDate.AddDays(-(int)baseDate.DayOfWeek);
var thisWeekEnd = thisWeekStart.AddDays(7).AddSeconds(-1);
var lastWeekStart = thisWeekStart.AddDays(-7);
var lastWeekEnd = thisWeekStart.AddSeconds(-1);
var thisMonthStart = baseDate.AddDays(1 - baseDate.Day);
var thisMonthEnd = thisMonthStart.AddMonths(1).AddSeconds(-1);
var lastMonthStart = thisMonthStart.AddMonths(-1);
var lastMonthEnd = thisMonthStart.AddSeconds(-1);

Я использую эти значения и извлекаю записи только на основе startdate и lastdate ... Точно так же, как stackoverflow Today,Yesterday,this week, last week,this month,Last month ....

Ответы [ 4 ]

4 голосов
/ 12 мая 2010

Вы не включили часть времени ... так что оба получают одно и то же значение.

Вам нужно:

SELECT *
FROM Table
WHERE CreatedDate >= '5/12/2010 00:00:00'
    AND CreatedDate <= '5/12/200 23:59:59'

Или:

SELECT *
FROM Table
WHERE CreatedDate >= @StartDate
    AND CreatedDate <= DATEADD(day, 1, @StartDate)

UPDATE

После просмотра вашего обновления изменение запроса, как и во втором примере, все равно будет работать. Вы также можете внести изменения в свой код C #:

GetBookingReportByDate(today, today.AddDays(1));
2 голосов
/ 12 мая 2010

Проблема в том, что SQL сравнивает дату и время.Таким образом, ваш запрос переводится как CreatedDate Between '2010-05-12 00:00:00.000' And '2010-05-12 00:00:00.000'.Вместо этого вы должны сделать что-то вроде:

CreatedDate >= @StartDate And CreatedDate < DateAdd(d,1,@EndDate).

1 голос
/ 12 мая 2010

Попробуйте вместо этого:

Select *
from table
where CreatedDate >= @StartDate
    and CreatedDate < @EndDate

и установите @EndDate на "завтра"

0 голосов
/ 12 мая 2010

Если вы не хотите изменять оператор SQL, вы можете изменить C # следующим образом:

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