Различать ошибки Oracle и предупреждающие сообщения

В году может быть более 52 недель. Каждый год имеет 52 полных недели + 1 или +2 (високосный год) дополнительных дней. Они собираются на 53-й неделе.

  • 52 недели * 7 дней = 364 дня.

Итак, для каждого года у вас есть хотя бы один дополнительный день. Два для високосных лет. Эти дополнительные дни считаются отдельными неделями?

Сколько недель действительно зависит от начального дня вашей недели. Давайте рассмотрим это на 2012 год.

  • США (воскресенье -> суббота): 52 недели + одна короткая 2-дневная неделя на 2012-12-30 годы и amp; 2012-12-31. В результате это составляет 53 недели. Последние два дня этого года (воскресенье + понедельник) составляют свою короткую неделю.

Проверьте настройки текущей культуры, чтобы увидеть, что она использует в качестве первого дня недели.

Как вы видите, в результате получается нормально.

  • Европа (понедельник -> воскресенье): январь 2dn (2012-1-2) - первый понедельник, так что это это первый день первой недели. Спросите номер недели на 1 января, и вы вернетесь 52, так как это считается частью прошлой недели 2011 года.

Возможно даже иметь 54-ю неделю. Случается каждые 28 лет, когда 1 января и 31 декабря рассматриваются как отдельные недели. Это тоже должен быть високосный год.

Например, 2000 год имел 54 недели. 1 января (сидел) был первый недельный день, а 31 декабря (солнце) был вторым недельным днем.

var d = new DateTime(2012, 12, 31);
CultureInfo cul = CultureInfo.CurrentCulture;

var firstDayWeek = cul.Calendar.GetWeekOfYear(
    d,
    CalendarWeekRule.FirstDay,
    DayOfWeek.Monday);

int weekNum = cul.Calendar.GetWeekOfYear(
    d,
    CalendarWeekRule.FirstDay,
    DayOfWeek.Monday);

int year = weekNum == 52 && d.Month == 1 ? d.Year - 1 : d.Year;
Console.WriteLine("Year: {0} Week: {1}", year, weekNum);

Распечатывает: Год: 2012 Неделя: 54

Измените CalendarWeekRule в приведенном выше примере на FirstFullWeek или FirstFourDayWeek, и вы вернетесь назад 53. Давайте сохраним начальный день в понедельник, так как мы имеем дело с Германией.

Итак, неделя 53 начинается в понедельник 2012-12- 31, длится один день, а затем останавливается.

53 - правильный ответ. Измените культуру на германию, если хотите попробовать.

CultureInfo cul = CultureInfo.GetCultureInfo("de-DE");
1
задан tuseau 16 July 2010 в 13:26
поделиться

1 ответ

Сам Oracle не создает предупреждающих или информационных сообщений, только исключения для сообщений об ошибках. Однако у него есть некоторая информация, которую вы можете запросить в PL / SQL, например:

SQL% ROWCOUNT:

update emp
set sal = sal+1000
where depno = 10;

if sql%rowcount = 0 then
    -- no rows got updated
    ...

курсор% NOTFOUND:

loop
    fetch mycursor into myvar;
    exit when mycursor%notfound;
end loop;
2
ответ дан 2 September 2019 в 23:01
поделиться
Другие вопросы по тегам:

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