Как я добираюсь в прошлый раз конкретных суток

Доступ к защищенным элементам возможен из производных классов. Частные не могут.

class Base {

private: 
  int MyPrivateInt;
protected: 
  int MyProtectedInt;
public:
  int MyPublicInt;
}

class Derived : Base
{
public:
  int foo1()  { return MyPrivateInt;} // Won't compile!
  int foo2()  { return MyProtectedInt;} // OK  
  int foo3()  { return MyPublicInt;} // OK
};

class Unrelated 
{
private:
  Base B;
public:
  int foo1()  { return B.MyPrivateInt;} // Won't compile!
  int foo2()  { return B.MyProtectedInt;} // Won't compile
  int foo3()  { return B.MyPublicInt;} // OK
};

С точки зрения «лучшей практики» это зависит. Если есть даже небольшая вероятность, что кто-то может захотеть получить новый класс из вашего существующего и получить доступ к внутренним членам, сделайте их Защищенными, а не частными. Если они частные, ваш класс может стать трудно унаследовать.

20
задан Joe Doyle 30 April 2012 в 00:48
поделиться

3 ответа

Ответ SELECT DATEADD(ms, -3, '2008-01-24'), объяснение ниже.

От блог Marc:

, Но ожидают, Marc... Вы сказали, что Вам нравится использовать BETWEEN, но тот запрос не имеет того... поэтому BETWEEN , содержащий , означая, что он включает конечные точки. Если бы у меня был Порядок, который был должен в полночь первого дня следующего месяца, то он был бы включен. Таким образом, как Вы получаете соответствующее значение для конца периода? Это несомненно НЕ при помощи частей даты для сборки одной (но Вы, должен, помните, что это - 23:59:59.997, поскольку максимальное время... не забывает миллисекунды). Чтобы сделать его правильно, мы используем кровосмесительное знание, что столбцы Microsoft SQL Server DATETIME имеют самое большее 3 разрешения миллисекунды (что-то, что не собирается изменяться). Таким образом, все, что мы делаем, вычитают 3 миллисекунды из любой из тех формул конца периода, данных выше. Например, прошлый момент вчера (местного времени):

    SELECT DATEADD(ms, -3, DATEADD(dd, DATEDIFF(dd, 0, GetDate()), 0))

Так, чтобы сделать заказы, должные в этом месяце как BETWEEN запрос, можно использовать это:

    SELECT [ID]
    FROM [dbo].[Orders]
    WHERE [ShipDue] BETWEEN DATEADD(mm, DATEDIFF(mm, 0, GetUTCDate()), 0)
    AND DATEADD(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, GetUTCDate()) + 1, 0))

Помнят, всегда удостоверяйтесь, что Вы делаете математику против входных параметров, столбцы NOT , или Вы уничтожите SARG - способность запроса, что означает индексы, которые, возможно, использовались, не.

22
ответ дан 29 November 2019 в 23:23
поделиться
SELECT DATEADD(ms, -2, DATEADD(dd, 1, DATEDIFF(dd, 0, GetDate())))

я думал, что у Вас был c# сначала.. Я оставлю это здесь в случае, если кто-либо еще спотыкается через это.

DateTime now = DateTime.Now;
DateTime endofDay = now.Date.AddDays(1).AddMilliseconds(-1);

можно заменить 'теперь' переменная с любым днем, который Вы пытаетесь выяснить

15
ответ дан 29 November 2019 в 23:23
поделиться

Добавьте-1 , миллисекунды к эти запускаются из следующий 116-дневный (DateAdd даже поддерживает наносекунды, если Вы хотите получить реальный штраф).

, Но скорее всего Вы просто хотите использовать это значение в сравнении, и в этом случае это еще более просто.

, А не что-то вроде этого:

AND @CompareDate <= [LastTimeforThatday]

или это:

@compareDate BETWEEN [StartDate] AND [LastTimeforThatday]

Делают это как это:

AND @CompareDate < [BeginningOfNextDay]

или это:

AND (@CompareDate >= [StartDate] AND @CompareDate < [BeginningOfNextDay])
8
ответ дан 29 November 2019 в 23:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: