посчитать количество дней текущего месяца с первого дня до вчерашнего дня - PullRequest
1 голос
/ 23 января 2020

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

select order_id 
from orders 
where date > dateadd(-23 to current_date) and date < 'today'

желаемый код - что-то вроде

select order_id 
from orders 
where date > dateadd(datediff(day,firstdayofthemonth,current_date) to current_date) and date < 'today'

Оцените любую помощь

Ответы [ 3 ]

2 голосов
/ 23 января 2020

В Firebird вы можете сделать:

WHERE 
    date >= DATEADD(1 - EXTRACT(DAY FROM CURRENT_DATE) DAY TO CURRENT_DATE) 
    AND date < CURRENT_DATE
1 голос
/ 24 января 2020

В дополнение к ответу, предоставленному Марком, вы также можете использовать BETWEEN (начиная с Firebird 2.0.4)

WHERE 
   date BETWEEN current_date - extract(day from current_date) + 1 
            AND current_date - 1

PS все эти ответы основаны на DATE типе данных (таким образом, date столбец и CURRENT_DATE переменная), не имеющие временной части. Что дано для современного SQL диалекта 3. Но если диалект 1 привыкнет, то это не дано.

1 голос
/ 23 января 2020

В дополнение к ответу, предоставленному GMB, вы также можете использовать тот факт, что Firebird позволяет добавлять дни к дате без необходимости использовать dateadd:

date > current_date - extract(day from current_date) 
and date < current_date
...