Выберите первый день предыдущего месяца в SQL (DB2)

Из Википедии:

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

Есть несколько способов достижения безопасности потока:

Повторный вход:

Написание кода таким образом, что он может быть частично выполнен одной задачей , повторно введенный другой задачей, а затем возобновленный с исходной задачи. Это требует сохранения информации о состоянии в переменных, локальных для каждой задачи, обычно в ее стеке, а не в статических или глобальных переменных.

Взаимное исключение:

Доступ к совместно используемым данным сериализуется с использованием механизмов, которые гарантируют, что только один поток читает или записывает совместно используемые данные в любое время. Требуется большая осторожность, если фрагмент кода обращается к нескольким совместно используемым частям данных - проблемы включают в себя условия гонки, взаимоблокировки, блокировки в реальном времени, голодание и различные другие проблемы, перечисленные во многих учебниках по операционным системам.

Локальное хранилище потока:

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

Атомарные операции:

Доступ к общим данным осуществляется с помощью атомарных операций, которые не могут быть прерваны другими потоками. Обычно это требует использования специальных инструкций машинного языка, которые могут быть доступны в библиотеке времени выполнения. Поскольку операции являются атомарными, общие данные всегда сохраняются в допустимом состоянии независимо от того, какие другие потоки обращаются к ним. Атомарные операции составляют основу многих механизмов блокировки потоков.

читать дальше:

http://en.wikipedia.org/wiki/Thread_safety


7
задан nearly_lunchtime 30 June 2009 в 13:11
поделиться

4 ответа

Первый день этого года:

date('0001-01-01') + year(current date) years - 1 year

Первый день этого месяца:

date('0001-01-01') + year(current date) years - 1 year + month(current date) months - 1 month

Первый день прошлого месяца :

date('0001-01-01') + year(current date) years - 1 year + month(current date) months - 2 months
10
ответ дан 6 December 2019 в 06:50
поделиться

Я считаю, что следующее вам подойдет.

ROUND_TIMESTAMP (somedate,'W')
0
ответ дан 6 December 2019 в 06:50
поделиться

Чтобы дополнить это дополнительной информацией. Приведенное выше решение идеально подходит, если вам нужен первый день месяца, скажем, вы хотите последний день месяца, или, в моем случае, мне нужен последний день следующего квартала.

Сверху я делал

date('0001-01-31') + year(date(prevQdate))years - 1 year + month(prevQdate) months + 2 months)

Что не давало мне того, что я хотел, иногда дата была 30-го числа вместо 31-го в месяцах с 31 днем ​​...

Изменение на

date('0001-01-31') + year(date(prevQdate))years - 1 year + **(month(prevQdate) + 2)** months)

Дало мне то, что я хотел. Похоже, первое добавление месяцев с даты предыдущего квартала сбрасывало ДЕНЬ в моей дате, и, таким образом, второе добавление месяцев работало с датой только с 30 днями в месяце.

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

1
ответ дан 6 December 2019 в 06:50
поделиться

Первый день текущего месяца:

CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS 

Первый текущего года -

CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS - (MONTH(CURRENT_DATE)-1) MONTHS 

Последний день последнего месяца:

CURRENT_DATE - DAY(CURRENT_DATE) DAYS 

Первый день последнего месяца:

CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS - 1 MONTH 
11
ответ дан 6 December 2019 в 06:50
поделиться
Другие вопросы по тегам:

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