Problema:
Você gostaria de adicionar um mês a uma determinada data em um banco de dados SQLite.
Exemplo:
Nosso banco de dados tem uma tabela chamada
production
com dados nas colunas id
, product
e start_date
. id | produto | data_inicial |
---|---|---|
1 | mesa | 2019-08-17 |
2 | poltrona | 2019-07-17 |
3 | sofá | 31-10-2019 |
Os produtos têm uma nova data de início de produção um mês após a listada acima. Vamos pegar os nomes dos produtos e sua nova data de início.
Aqui está a consulta que você escreveria:
Solução:
SELECT product, DATE(start_date,'+1 months') AS new_start_date FROM production;
Segue o resultado da consulta:
id | produto | new_start_date |
---|---|---|
1 | mesa | 2019-09-17 |
2 | poltrona | 2019-08-17 |
3 | sofá | 2019-12-01 |
Discussão:
Use o SQLite
DATE()
função para adicionar um mês a uma determinada data (ou data e hora). Os argumentos necessários incluem a data/datahora a ser alterada e um ou mais modificadores com valores que indicam quantas unidades adicionar ou subtrair. O primeiro argumento pode ser uma expressão que retorna um valor de data/datahora ou uma coluna de data/datahora. Em nosso exemplo, é a coluna
start_date
. Os modificadores indicam qual (e quanto) unidade de tempo adicionar/subtrair. Em nosso exemplo, usamos o modificador '+1 meses '. O modificador começa com mais ou menos, indicando adição ou subtração. Em seguida, há um valor (por exemplo, 1) e a unidade (por exemplo, meses , anos , dias , etc.) Se você escrever '-2 dias ’, você subtrai 2 dias de uma determinada data.
Importante: Alguns modificadores requerem uma sintaxe ligeiramente diferente da mostrada acima. Por exemplo, o 'dia da semana ' vem antes do valor (ou seja,
DATE(start_date,'weekday 3')
). Outros modificadores não aceitam valores, como 'início do mês ', que exibe o primeiro dia do mês para uma determinada data (ou seja, DATE(start_date,' start of month')
). Você pode encontrar informações precisas sobre modificadores de data e hora na documentação do SQLite. Nomeamos a nova coluna contendo a data de início atualizada
new_start_date
. A nova data de início da produção para a mesa é 2019-09-17
, um mês depois da data original de 2019-08-17
. Observe que para 2019-10-31
, a nova data é 2019-12-01
; isso ocorre porque novembro tem 30 dias, não 31.