Funções de data no SQL Server: sintaxe
Tal como acontece com funções semelhantes,DATEADD
pode fazer aritmética em datas, assim como horários. A sintaxe é direta:
DATEADD (datepart, number, date)
O number
deve ser um número inteiro e deve estar dentro do intervalo aceitável de valores para a parte da data.
A datepart
deve ser uma das seguintes partes da data:
DATEPART | ABREVIATURAS |
ano | yy, yyyy |
trimestre | qq, q |
mês | mm, m |
dia de ano | dy, y |
dia | dd, d |
semana | wk, ww |
dia da semana | dw, w |
hora | hh |
minuto | mi, n |
segundo | ss, s |
milissegundo | Senhora |
microssegundo | mcs |
nanossegundo | ns |
Embora DATEADD
suporte abreviações conforme mostrado na tabela anterior, devemos nos esforçar para usar a expressão completa para garantir clareza em nosso código. O SQL Server não roda mais rápido se usarmos abreviações.
Também tenha em mente que, embora possamos adicionar ou subtrair nanossegundos com DATEADD
, a menor granularidade para um DATETIME2
tipo de dados é de 100 nanossegundos, portanto, o arredondamento precisa ser levado em consideração.
Tipo de retorno
DATEADD
retornará um resultado usando o tipo de dados que foi usado no date
parâmetro. Por exemplo, se usarmos uma string literal representando uma data no YYYYMMDD
formato, o tipo de retorno será um DATETIME
valor, porque as sequências literais são implicitamente convertidas DATETIME
.
SELECT DATEADD(DAY, 1, '20181031') -- retorna DATETIME '2018-11-01 00:00:00.000'
No entanto, se usarmos um DATETIME2
valor de entrada, o resultado será um DATETIME2
valor.
SELECT DATEADD(NANOSECOND, 100, CAST('20181031' AS DATETIME2)) -- Retorna DATETIME2
Adição e subtração
Vimos anteriormente que DATEADD
podem ser usados para adição e subtração, o que facilita o cálculo dos valores tanto para trás quanto para frente. Então vamos supor que precisamos calcular um ponto no tempo que foi há 100 dias. Portanto, se usarmos hoje como nosso ponto de partida, seria o seguinte:
DECLARE @dt DATETIME2 = SYSUTCDATETIME(); SELECT @dt AS [TempoAgora], DATEADD(DAY, -100, @dt) AS [TempoSubtraido];
Aritmética nos meses
Um pensamento final sobre essa função. Ao adicionar ou subtrair meses, tome cuidado com meses que não contenham 31 dias. Por exemplo, vamos adicionar um mês ao final de fevereiro de 2018:
SELECT DATEADD(MONTH, 1, '20180428') -- Rerorna DATETIME '2018-05-28 00:00:00.000'
SELECT DATEADD(MONTH, 1, '20180131'); -- Retorna DATETIME '2018-02-28 00:00:00.000' SELECT DATEADD(MONTH, 2, '20180131'); -- Retorna DATETIME '2018-03-31 00:00:00.000' SELECT DATEADD(MONTH, 3, '20180131'); -- Retorna DATETIME '2018-04-30 00:00:00.000'
DATEADD
é uma função do sistema muito útil em T-SQL para adicionar e subtrair valores de uma data e hora, que eu uso extensivamente.
As funções de data no SQL Server podem ser extremamente poderosas. Contanto que tenhamos em mente suas peculiaridades em torno de tipos de dados e duração de meses,
Contudo, sinta-se à vontade para compartilhar suas dicas e truques sobre funções de data no SQL Server nos comentários abaixo.
Wesley Mota
Latest posts by Wesley Mota (see all)
- The Ultimate Guide to Gry Online Ruletka - novembro 14, 2024