No SQLite, podemos usar o
DATE()
função para adicionar um ou mais meses a uma data. Quando estamos lidando com valores de data e hora, podemos usar o
DATETIME()
função. Exemplo
Aqui está um exemplo que usa o
DATE()
função:SELECT DATE('2050-08-21', '+1 month');
Resultado:
2050-09-21
Se quiséssemos subtrair o valor, poderíamos substituir
+
com -
. Além disso, omitindo o
+
parte resulta no valor adicionado, como se tivéssemos usado +
:SELECT DATE('2050-08-21', '1 month');
Resultado:
2050-09-21
Podemos especificar os meses na forma plural ou não plural. Em outras palavras,
month
é equivalente a months
:SELECT
DATE('2050-08-21', '+3 month') AS month,
DATE('2050-08-21', '+3 months') AS months;
Resultado:
month months ---------- ---------- 2050-11-21 2050-11-21
Especificado em dias
Alternativamente, podemos adicionar um mês ou mais à data com base em um número de dias:
SELECT DATE('2050-08-21', '+31 days');
Resultado:
2050-09-21
No entanto, tenha em mente que isso exigirá que você saiba exatamente quantos dias são apropriados para os meses envolvidos. Alguns meses têm 30 dias, alguns têm 31 e fevereiro tem 28 ou 29, dependendo se é um ano bissexto ou não.
Com o
month
/months
modificador, o SQLite normaliza a data, com base no número de dias nos meses relevantes. Aqui está uma comparação de meses versus dias ao adicionar uma data em março:
SELECT
DATE('2050-03-31', '+1 month') AS "1 month",
DATE('2050-03-31', '+30 days') AS "30 days",
DATE('2050-03-31', '+31 days') AS "31 days";
Resultado:
1 month 30 days 31 days ---------- ---------- ---------- 2050-05-01 2050-04-30 2050-05-01
E aqui está a mesma comparação ao adicionar uma data em setembro:
SELECT
DATE('2050-09-30', '+1 month') AS "1 month",
DATE('2050-09-30', '+30 days') AS "30 days",
DATE('2050-09-30', '+31 days') AS "31 days";
Resultado:
1 month 30 days 31 days ---------- ---------- ---------- 2050-10-30 2050-10-30 2050-10-31
O DATETIME()
Função
Aqui está um exemplo que demonstra como usar o
DATETIME()
função para adicionar um mês a um valor de data e hora:SELECT DATETIME('2050-08-21', '+1 month');
Resultado:
2050-09-21 00:00:00
Nesse caso, passei um valor de data, mas a função retornou um valor de data e hora.
Aqui está outro exemplo, desta vez com um valor datetime:
SELECT DATETIME('2050-08-21 18:30:45', '+1 month');
Resultado:
2050-09-21 18:30:45