Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Funções escalares ODBC para data e hora no SQL Server (Exemplos de T-SQL)


Você pode usar funções escalares ODBC ao executar instruções T-SQL no SQL Server. Existem vários tipos de funções escalares ODBC, incluindo funções de string, funções numéricas, funções de sistema e, claro, funções de data/hora (também chamadas de funções de data, hora e intervalo).

Abaixo estão exemplos das funções de data, hora e intervalo que você pode usar no SQL Server.


Sintaxe


Primeiro, aqui está a sintaxe que você precisa usar sempre que chamar uma função escalar ODBC:
SELECT {fn  [ (,....n) ] }

Onde <function_name> é o nome da função e (<argument>,....n) é qualquer número de argumentos opcionais.

Portanto, a principal coisa a lembrar é que quando você chama uma função escalar ODBC, você precisa colocar a chamada de função entre chaves ({} ) e prefixe o nome com fn .

Exemplo 1 – AGORA()


Esta função retorna a data e a hora atuais como um valor de carimbo de data/hora.
SELECT {fn NOW()} AS Resultado;

Resultado:
+-------------------------+| Resultado ||-------------------------|| 13/06/2018 21:52:25.667 |+-------------------------+

Exemplo 2 – carimbo de data/hora, data e hora


O CURRENT_TIMESTAMP() A função retorna a data local atual e a hora local como um valor de carimbo de data/hora. Você também pode usar o CURRENT_DATE() para retornar apenas a parte da data e/ou CURRENT_TIME() para retornar apenas a parte do tempo.
SELECT {fn CURRENT_TIMESTAMP()} AS 'Data &Hora', {fn CURRENT_DATE()} AS 'Data', {fn CURRENT_TIME()} AS 'Hora';

Resultado:
+--------------+------------+------- -------+| Data e hora | Data | Tempo ||--------------+------------+-------- ------|| 2018-06-13 21:57:29.197 | 13-06-2018 | 21:57:29.197 |+----------------------------+------------+-------- ----------+

Além disso, CURRENT_TIMESTAMP() e CURRENT_TIME() ambos aceitam um argumento opcional para determinar a precisão de segundos do valor retornado.

Exemplos:
SELECT {fn CURRENT_TIMESTAMP(3)} AS 'Data e Hora', {fn CURRENT_TIME(6)} AS 'Hora';

Resultado:
+-------------------------+-----------------+| Data e hora | Hora ||-------------------------+-----------------|| 2018-06-13 22:00:59.263 | 22:00:59.263000 |+----------------------------------------+----------------- +

Neste exemplo, CURRENT_TIMESTAMP() retorna uma precisão de segundos de 3, enquanto CURRENT_TIME() retorna uma precisão de segundos de 6.

Exemplo 3 – CURDATE() e CURTIME()


Você pode usar CURDATE() e/ou CURTIME() como alternativa às funções de data e hora acima:
SELECT {fn CURDATE()} AS 'Data', {fn CURDATE()} AS 'Hora';

Resultado:
+------------+--------------+| Data | Tempo ||------------+--------------|| 13-06-2018 | 22:05:20.013 |+------------+--------------+

Observe que esses argumentos não aceitam argumentos, portanto, se você precisar especificar a precisão de segundos, use CURRENT_DATE() e/ou CURRENT_TIME() em vez de.

Exemplo 4 – Dias e Semanas


Existem várias funções escalares ODBC para retornar partes específicas de um valor de data. Essas funções aceitam um argumento, que é a expressão de data da qual extrair a parte de data desejada.

Aqui estão as várias funções para retornar os dias e semanas a partir da data:
DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';SELECT {fn DAYNAME(@date)} AS 'DAYNAME', {fn DAYOFYEAR(@date)} AS 'DAYOFYEAR', {fn DAYOFMONTH(@date)} AS 'DAYOFMONTH', {fn DAYOFWEEK(@date)} AS 'DAYOFWEEK', {fn WEEK(@date)} AS 'WEEK';

Resultado:
+-----------+-------------+--------------+----- --------+--------+| DAYNAME | DIADEANO | DIA DE MÊS | DIA DA SEMANA | SEMANA ||-----------+-------------+-----------+------ -------+--------|| segunda-feira | 45 | 14 | 2 | 8 |+-----------+-------------+--------------+------ -------+--------+

Nesse caso, atribuímos uma data a uma variável e passamos essa variável para cada função. A função então retornou a parte de data aplicável.

Exemplo 5 – Meses, Trimestres e Anos


Aqui estão as várias funções para retornar os meses, trimestres e anos a partir do valor de data/hora:
DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';SELECT {fn YEAR(@date)} AS 'YEAR', {fn MONTH(@date)} AS 'MONTH', {fn MONTHNAME(@date)} AS 'MONTHNAME', {fn QUARTER(@date)} AS 'QUARTER';

Resultado:
+--------+---------+-------------+-----------+| ANO | MÊS | NOME DO MÊS | QUARTER ||--------+---------+-------------+-----------|| 2000 | 2 | Fevereiro | 1 |+--------+---------+------------+-----------+ 

Exemplo 6 – Horas, Minutos e Segundos


Aqui estão as várias funções para retornar a parte de horas, minutos e segundos do valor de data/hora:
DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';SELECT {fn HOUR(@date)} AS 'HOUR', {fn MINUTE(@date)} AS 'MINUTE', {fn SECOND(@date)} AS 'SECOND';

Resultado:
+--------+----------+----------+| HORA | MINUTO | SEGUNDO ||--------+----------+----------|| 7 | 31 | 58 |+--------+----------+----------+

Exemplo 7 – A função EXTRACT()


Há também uma função escalar ODBC chamada EXTRACT() , que permite extrair as várias partes de data do valor de data/hora. Exemplos abaixo.

Ano, mês e dia

DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';SELECT {fn EXTRACT(YEAR FROM @date)} AS 'YEAR', {fn EXTRACT(MONTH FROM @date)} AS 'MONTH ', {fn EXTRACT(DAY FROM @date)} AS 'DAY';

Resultado:
+--------+---------+-----------+| ANO | MÊS | DIA ||--------+---------+-----------|| 2000 | 2 | 14 |+--------+---------+-----------+

Horas, minutos e segundos

DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';SELECT {fn EXTRACT(HOUR FROM @date)} AS 'HOUR', {fn EXTRACT(MINUTE FROM @date)} AS 'MINUTE ', {fn EXTRACT(SECOND FROM @date)} AS 'SECOND';

Resultado:
+--------+----------+----------+| HORA | MINUTO | SEGUNDO ||--------+----------+----------|| 7 | 31 | 58 |+--------+----------+----------+

Exemplo 8 – A função TIMESTAMPADD()


TIMESTAMPADD() permite adicionar um número especificado do intervalo especificado (parte de data/hora) ao valor de data/hora. Esta função aceita três argumentos; o intervalo (parte de data/hora) a ser adicionado (por exemplo, mês), o número dessa parte a ser adicionada e o valor da data. Exemplos abaixo.

Ano, Trimestre, Mês e Dia

DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';SELECT {fn TIMESTAMPADD(SQL_TSI_YEAR, 21, @date)} AS 'SQL_TSI_YEAR', {fn TIMESTAMPADD(SQL_TSI_QUARTER, 21, @date) } AS 'SQL_TSI_QUARTER', {fn TIMESTAMPADD(SQL_TSI_MONTH, 21, @date)} AS 'SQL_TSI_MONTH', {fn TIMESTAMPADD(SQL_TSI_DAY, 21, @date)} AS 'SQL_TSI_DAY';

Resultado:
SQL_TSI_YEAR | 14/02/2021 07:31:58.1234567SQL_TSI_QUARTER | 2005-05-14 07:31:58.1234567SQL_TSI_MONTH | 2001-11-14 07:31:58.1234567SQL_TSI_DAY | 06-03-2000 07:31:58.1234567

Horas, minutos e segundos

DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';SELECT {fn TIMESTAMPADD(SQL_TSI_HOUR, 5, @date)} AS 'SQL_TSI_HOUR', {fn TIMESTAMPADD(SQL_TSI_MINUTE, 5, @date) } AS 'SQL_TSI_MINUTE', {fn TIMESTAMPADD(SQL_TSI_SECOND, 5, @date)} AS 'SQL_TSI_SECOND', {fn TIMESTAMPADD(SQL_TSI_FRAC_SECOND, 5, @date)} AS 'SQL_TSI_FRAC_SECOND';

Resultado:
SQL_TSI_HOUR | 2000-02-14 12:31:58.1234567SQL_TSI_MINUTE | 2000-02-14 07:36:58.1234567SQL_TSI_SECOND | 2000-02-14 07:32:03.1234567SQL_TSI_FRAC_SECOND | 14-02-2000 07:31:58.1284567

Exemplo 9 – A função TIMESTAMPDIFF()


O TIMESTAMPDIFF() A função retorna a diferença entre dois valores de data/hora. Esta função aceita três argumentos; o intervalo (parte de data/hora) para o qual calcular a diferença (por exemplo, mês), a primeira data e a segunda data. A função retorna o número de intervalos em que a primeira data é maior que a segunda data Exemplos abaixo.

Ano, Trimestre, Mês, Semana e Dia

DECLARE @date1 datetime2 ='2000-02-14 07:31:58.1234567'; DECLARE @date2 datetime2 =DATEADD(year, 1, @date1);SELECT {fn TIMESTAMPDIFF(SQL_TSI_YEAR, @date1, @date2)} AS 'SQL_TSI_YEAR', {fn TIMESTAMPDIFF(SQL_TSI_QUARTER, @date1, @date2)} AS 'SQL_TSI_QUARTER ', {fn TIMESTAMPDIFF(SQL_TSI_MONTH, @date1, @date2)} AS 'SQL_TSI_MONTH', {fn TIMESTAMPDIFF(SQL_TSI_WEEK, @date1, @date2)} AS 'SQL_TSI_WEEK', {fn TIMESTAMPDIFF(SQL_TSI_DAY, @date1, @date2) } AS 'SQL_TSI_DAY';

Resultado:
+----------------+-------------------+--------- --------+----------------+---------------+| SQL_TSI_YEAR | SQL_TSI_QUARTER | SQL_TSI_MONTH | SQL_TSI_WEEK | SQL_TSI_DAY ||----------------+-------------------+---------- -------+----------------+---------------|| 1 | 4 | 12 | 52 | 366 |+----------------+-------------------+---------- -------+----------------+---------------+

Horas, minutos e segundos

DECLARE @date1 datetime2 ='2000-02-14 07:31:58.1234567'; DECLARE @date2 datetime2 =DATEADD(day, 1, @date1);SELECT {fn TIMESTAMPDIFF(SQL_TSI_HOUR, @date1, @date2)} AS 'SQL_TSI_HOUR', {fn TIMESTAMPDIFF(SQL_TSI_MINUTE, @date1, @date2)} AS 'SQL_TSI_MINUTE ', {fn TIMESTAMPDIFF(SQL_TSI_SECOND, @date1, @date2)} AS 'SQL_TSI_SECOND', {fn TIMESTAMPDIFF(SQL_TSI_FRAC_SECOND, @date1, @date2)} AS 'SQL_TSI_FRAC_SECOND';

Resultado:
+----------------+------------------+---------- --------+-----------------------+| SQL_TSI_HOUR | SQL_TSI_MINUTE | SQL_TSI_SECOND | SQL_TSI_FRAC_SECOND ||----------------+------------------+----------- -------+-----------------------|| 24 | 1440 | 86400 | 86400000 |+----------------+------------------+----------- -------+-----------------------+