Nessa matéria, apresento uma compilação de grande parte das funções do SQL Server 2000.
Funções escalares
SET NOCOUNT ON
USE MASTER
GO
IF EXISTS(SELECT 1 FROM SYSDATABASES WHERE NAME = 'EXEMPLOS')
DROP DATABASE EXEMPLOS
GO
CREATE DATABASE EXEMPLOS
GO
USE EXEMPLOS
CREATE TABLE PESSOA
(
NOME VARCHAR(10),
APELIDO VARCHAR(10)
)
INSERT INTO PESSOA VALUES ('BRUNO', 'AGNALDINHO')
INSERT INTO PESSOA VALUES ('ANTONIO', 'NETINHO')
INSERT INTO PESSOA VALUES ('PEDRO', 'B-')
INSERT INTO PESSOA VALUES ('AGNALDO', 'OGRO')
INSERT INTO PESSOA VALUES ('ANA', 'BANANA')
INSERT INTO PESSOA VALUES ('MARIA', 'VARETA')
INSERT INTO PESSOA VALUES ('MARIANA', NULL)
INSERT INTO PESSOA VALUES ('ANA MARIA', NULL)
/*
ABS(NUMERO)
RETORNA O VALOR ABSOLUTO DE UM NÚMERO QUALQUER
*/
SELECT ABS(1)
--1
SELECT ABS(-123)
--123
SELECT ABS(NULL)
--NULL
SELECT ABS('ABACATE')
-- ERRO 8114: Error converting data type varchar to float.
/*
SIGN(NUMERO)
RETORNA O SINAL DE POSITIVO OU NEGATIVO DO NÚMERO
*/
SELECT SIGN(1)
--1 ? POSITIVO
SELECT SIGN(-123)
-- -1 ? NEGATIVO
SELECT SIGN(NULL)
--NULL
SELECT SIGN(0)
--0 ? SEM SINAL
SELECT SIGN('ABACATE')
-- ERRO 8114: Error converting data type varchar to float.
/*
CEILING(NUMERO)
RETORNA O MENOR INTEIRO QUE SEJA MAIOR OU IGUAL
AO NÚMERO FORNECIDO À FUNÇÃO
*/
SELECT CEILING(1.23)
--2
SELECT CEILING(-1.23)
-- -1
SELECT CEILING(-1.99)
-- -1
SELECT CEILING(NULL)
--NULL
/*
FLOOR(NUMERO)
RETORNA O MAIOR INTEIRO QUE SEJA MENOR OU IGUAL
AO NÚMERO FORNECIDO À FUNÇÃO
*/
SELECT FLOOR(1.23)
--1
SELECT FLOOR(-1.23)
-- -2
SELECT FLOOR(-1.99)
-- -2
SELECT FLOOR(NULL)
--NULL
/*
ROUND(NUMERO, PRECISÃO, ARREDONDAR_OU_TRUNCAR)
ARREDONDA OU TRUNCA O NÚMERO FORNECIDO,
DE ACORDO COM A PRECISÃO INFORMADA
SE O TERCEIRO PARÂMETRO NÃO FOR PASSADO PARA
A FUNÇÃO, O NÚMERO É ARREDONDADO. SE QUISER
QUE O NÚMERO SEJA TRUNCADO, DEVE-SE FORNECER
O VALOR 1
*/
SELECT ROUND(256.9994, 3)
--256.9990
SELECT ROUND(256.9995, 3)
--257.0000
SELECT ROUND(256.9994, -1)
--260.0000
SELECT ROUND(256.9994, -2)
--300.0000
SELECT ROUND(256.9995, 0, 0)
--257.0000
SELECT ROUND(256.9995, 0, 1)
-- 256.0000
/*
PI()
RETORNA O VALOR DE PI, COM 16 CASAS DECIMAIS
*/
SELECT PI()
--3.1415926535897931
/*
SQUARE(NUMERO)
RETORNA O QUADRADO DE UM NÚMERO
*/
SELECT SQUARE(3)
--9.0
SELECT SQUARE(-3)
--9.0
SELECT SQUARE(3.9876)
--15.90095376
/*
POWER(NUMERO, POTENCIA)
RETORNA O VALOR DO NÚMERO ELEVADO À N-ÉSIMA POTÊNCIA
*/
SELECT POWER(3, 2)
--9
SELECT POWER(3, -2)
--0 ? ERRADO... ARREDONDOU O RESULTADO PARA INTEIRO
SELECT POWER(3.000, -2)
--0.111
SELECT POWER(3, .5)
--1 ? ERRADO... ARREDONDOU O RESULTADO PARA INTEIRO
SELECT POWER(3.0, .5)
--1.7
SELECT POWER(3.00, .5)
--1.73
SELECT POWER(3, NULL)
--NULL
SELECT POWER(27, (1/3))
--1 ? ERRADO... ARREDONDOU O RESULTADO DA DIVISÃO 1/3 PARA ZERO
--QUALQUER NÚMERO ELEVADO A ZERO É 1
SELECT POWER(27.0, (1.0000/3))
--3 ? RAÍZ CÚBICA DE 27 É 3
/*
SQRT(NUMERO)
RETORNA A RAÍZ QUADRADA DE UM NUMERO
*/
SELECT SQRT(3)
--1.7320508075688772
SELECT SQRT(2)
--1.4142135623730951
SELECT SQRT(-3)
--ERRO ? A domain error occurred
--NA REALIDADE, NÃO EXISTE RAÍZ QUADRADA
--DE NÚMEROS NEGATIVOS EM R
/*
GETDATE()
RETORNA A DATA ATUAL DO SISTEMA
*/
SELECT GETDATE()
--2006-06-03 16:16:57.670
/*
GETUTCDATE()
RETORNA A DATA/HORA ATUAL DO SISTEMA, DE ACORDO COM O PADRÃO
UTC (UNIVERSAL TIME COORDINATE, OU GREENWICH MEAN TIME)
*/
SELECT GETUTCDATE()
--2006-06-03 19:16:57.670
/*
DAY(DATA)
RETORNA O DIA DE UMA DATA
*/
SELECT DAY(GETDATE())
--3
SELECT DAY('2006-12-15')
--15
SELECT DAY('15-12-2006')
--ERRO 242: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
SELECT DAY('12-15-2006')
--15
SET DATEFORMAT DMY
--MUDA O PADRÃO DE DATA DO SQL SERVER DE MDY (DEFAULT) PARA DMY
SELECT DAY('15-12-2006')
--15
SELECT DAY('12-15-2006')
--ERRO 242: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
SET DATEFORMAT MDY
--MUDA O PADRÃO DE DATA DO SQL SERVER DE DMY PARA O VALOR DEFAULT
/*
MONTH(DATA)
RETORNA O MÊS DE UMA DATA
*/
SELECT MONTH(GETDATE())
--6
SELECT MONTH('2006-12-15')
--12
SELECT MONTH('15-12-2006')
--ERRO 242: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
SELECT MONTH('12-15-2006')
--12
SET DATEFORMAT DMY
--MUDA O PADRÃO DE DATA DO SQL SERVER DE MDY (DEFAULT) PARA DMY
SELECT MONTH('15-12-2006')
--12
SELECT MONTH('12-15-2006')
--ERRO 242: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
SET DATEFORMAT MDY
--MUDA O PADRÃO DE DATA DO SQL SERVER DE DMY PARA O VALOR DEFAULT
/*
YEAR(DATA)
RETORNA O ANO DE UMA DATA
*/
SELECT YEAR(GETDATE())
--2006
SELECT YEAR('2006-12-15')
--2006
SELECT YEAR('15-12-2006')
--ERRO 242: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
SELECT YEAR('12-15-2006')
--2006
SET DATEFORMAT DMY
--MUDA O PADRÃO DE DATA DO SQL SERVER DE MDY (DEFAULT) PARA DMY
SELECT YEAR('15-12-2006')
--2006
SELECT YEAR('12-15-2006')
--ERRO 242: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
SET DATEFORMAT MDY
--MUDA O PADRÃO DE DATA DO SQL SERVER DE DMY PARA O VALOR DEFAULT
SELECT YEAR('19660912')
--1966
/*
DATENAME(PARTE, DATA)
RETORNA O NOME DA PARTE DE UMA DATA
*/
SELECT DATENAME(YY, '2006-06-03 16:16:57.670')
--2006 à YY = ANO DA DATA
SELECT DATENAME(QQ, '2006-06-03 16:16:57.670')
--2 à QQ = TRIMESTRE DA DATA
SELECT DATENAME(MM, '2006-06-03 16:16:57.670')
--June à MM = MÊS DA DATA
SELECT DATENAME(DY, '2006-06-03 16:16:57.670')
--154 à DY = DIA DO ANO
SELECT DATENAME(DD, '2006-06-03 16:16:57.670')
--3 à DD = DIA DO MÊS
SELECT DATENAME(WK, '2006-06-03 16:16:57.670')
--22 à WK = SEMANA DO ANO
SELECT DATENAME(DW, '2006-06-03 16:16:57.670')
--Saturday à DW = DIA DA SEMANA
SELECT DATENAME(HH, '2006-06-03 16:16:57.670')
--16 à HH = HORA DA DATA
SELECT DATENAME(MI, '2006-06-03 16:16:57.670')
--16 à MI = MINUTO DA DATA
SELECT DATENAME(SS, '2006-06-03 16:16:57.670')
--57 à SS = SEGUNDO DA DATA
SELECT DATENAME(MS, '2006-06-03 16:16:57.670')
--670 à MS = MILISSEGUNDO DA DATA
/*
DATEPART(PARTE, DATA)
RETORNA A PARTE DE UMA DATA
*/
SELECT DATEPART(YY, '2006-06-03 16:16:57.670')
--2006 à YY = ANO DA DATA
SELECT DATEPART(QQ, '2006-06-03 16:16:57.670')
--2 à QQ = TRIMESTRE DA DATA
SELECT DATEPART(MM, '2006-06-03 16:16:57.670')
--6 à MM = MÊS DA DATA
SELECT DATEPART(DY, '2006-06-03 16:16:57.670')
--154 à DY = DIA DO ANO
SELECT DATEPART(DD, '2006-06-03 16:16:57.670')
--3 à DD = DIA DO MÊS
SELECT DATEPART(WK, '2006-06-03 16:16:57.670')
--22 à WK = SEMANA DO ANO
SELECT DATEPART(DW, '2006-06-03 16:16:57.670')
--7 à DW = DIA DA SEMANA
SELECT DATEPART(HH, '2006-06-03 16:16:57.670')
--16 à HH = HORA DA DATA
SELECT DATEPART(MI, '2006-06-03 16:16:57.670')
--16 à MI = MINUTO DA DATA
SELECT DATEPART(SS, '2006-06-03 16:16:57.670')
--57 à SS = SEGUNDO DA DATA
SELECT DATEPART(MS, '2006-06-03 16:16:57.670')
--670 à MS = MILISSEGUNDO DA DATA
/*
DATEADD(PARTE, VALOR, DATA)
ADICIONA UM VALOR A UMA PARTE DE UMA DATA
*/
SELECT DATEADD(YY, 10, '2006-06-03 16:16:57.670')
--'2016-06-03 16:16:57.670'
SELECT DATEADD(YY, -10, '2006-06-03 16:16:57.670')
--'1996-06-03 16:16:57.670'
SELECT DATEADD(MM, 12, '2006-06-03 16:16:57.670')
--'2007-06-03 16:16:57.670'
SELECT DATEADD(DD, 30, '2006-06-03 16:16:57.670')
--'2006-07-03 16:16:57.670'
SELECT DATEADD(DD, 60, '2006-06-03 16:16:57.670')
--'2006-08-02 16:16:57.670'
/*
DATEDIFF(PARTE, DATA_INICIAL, DATA_FINAL)
SUBTRAI A DATA INICIAL DA DATA FINAL, INDICANDO
O RESULTADO NA UNIDADE DEFINIDA EM "PARTE"
*/
SELECT DATEDIFF(YY, '1966-09-12', '2006-06-03 16:16:57.670')
--40
SELECT DATEDIFF(MM, '1966-09-12', '2006-06-03 16:16:57.670')
--477
SELECT DATEDIFF(DD, '1966-09-12', '2006-06-03 16:16:57.670')
--14509
SELECT DATEDIFF(MI, '1966-09-12', '2006-06-03 16:16:57.670')
--20893936
/*
ASCII(TEXTO)
RETORNA O CÓDIGO ASCII DO PRIMEIRO
CARACTERE DO TEXTO PASSADO PARA A FUNÇÃO
(SÓ USADO EM CHAR E VARCHAR)
*/
SELECT ASCII('A')
--65
SELECT ASCII('ABACATE')
--65
SELECT NOME, ASCII(NOME) FROM PESSOA
/*
NOME
---------- -----------
BRUNO 66
ANTONIO 65
PEDRO 80
AGNALDO 65
ANA 65
MARIA 77
MARIANA 77
ANA MARIA 65
*/
/*
UNICODE(TEXTO)
RETORNA O CÓDIGO UNICODE DO PRIMEIRO
CARACTERE DO TEXTO PASSADO PARA A FUNÇÃO
*/
SELECT UNICODE('A')
--65
SELECT UNICODE('ABACATE')
--65
SELECT NOME, ASCII(NOME) FROM PESSOA
/*
NOME
---------- -----------
BRUNO 66
ANTONIO 65
PEDRO 80
AGNALDO 65
ANA 65
MARIA 77
MARIANA 77
ANA MARIA 65
*/
/*
CHAR(NUMERO)
RETORNA O CARACTERE QUE TEM O CÓDIGO ASCII INFORMADO
SE O CÓDIGO NÃO EXISTIR (FOR MAIOR QUE 255
OU MENOR QUE 0), RETORNA NULL
*/
SELECT CHAR(65)
--'A'
SELECT CHAR(97)
--'a'
/*
NCHAR(NUMERO)
RETORNA O CARACTERE QUE TEM O CÓDIGO UNICODE INFORMADO
SE O CÓDIGO NÃO EXISTIR (FOR MAIOR QUE 65535
OU MENOR QUE 0), RETORNA NULL
*/
SELECT NCHAR(65)
--'A'
SELECT NCHAR(97)
--'a'
/*
CHARINDEX(STRING_A_SER_PESQUISADA, TEXTO)
RETORNA A POSIÇÃO INICIAL ONDE A STRING
"STRING_A_SER_PESQUISADA" FOI ENCONTRADA
NO TEXTO
SE A STRING NÃO FOR ENCONTRADA, A FUNÇÃO RETORNA ZERO
*/
SELECT CHARINDEX('A', 'AGNALDO')
--1
SELECT CHARINDEX('O', 'AGNALDO')
--7
SELECT CHARINDEX('X', 'AGNALDO')
--0
/*
LEFT(TEXTO, N)
RETORNA OS PRIMEIROS N CARACTERES (DA ESQUERDA) DO
TEXTO PASSADO PARA A FUNÇÃO
*/
SELECT LEFT('AGNALDO DIOGO DOS SANTOS', 7)
--'AGNALDO'
/*
RIGHT(TEXTO, N)
RETORNA OS ÚLTIMOS N CARACTERES (DA DIREITA) DO
TEXTO PASSADO PARA A FUNÇÃO
*/
SELECT RIGHT('AGNALDO DIOGO DOS SANTOS', 6)
--'SANTOS'
SELECT RIGHT('AGNALDO DIOGO DOS SANTOS ', 6)
--'ANTOS '
/*
LEN(TEXTO)
RETORNA O COMPRIMENTO DO TEXTO INFORMADO
*/
SELECT LEN('AGNALDO D. DOS SANTOS')
--21
SELECT LEN('AGNALDO D. DOS SANTOS ')
--21
SELECT LEN(NULL)
--NULL
SELECT LEN(123456)
--6
/*
LOWER(TEXTO)
RETORNA O TEXTO, EM MINÚSCULAS
*/
SELECT LOWER('AGNALDO DIOGO DOS SANTOS')
--'agnaldo diogo dos santos'
/*
UPPER(TEXTO)
RETORNA O TEXTO, EM MAIÚSCULAS
*/
SELECT UPPER('Agnaldo Diogo dos Santos')
--'AGNALDO DIOGO DOS SANTOS'
/*
LTRIM(TEXTO)
RETORNA O TEXTO SEM OS ESPAÇOS EM BRANCO DA ESQUERDA
*/
SELECT LTRIM(' AGNALDO DIOGO DOS SANTOS ')
--'AGNALDO DIOGO DOS SANTOS '
/*
RTRIM(TEXTO)
RETORNA O TEXTO SEM OS ESPAÇOS EM BRANCO DA DIREITA
*/
SELECT RTRIM(' AGNALDO DIOGO DOS SANTOS ')
-- ' AGNALDO DIOGO DOS SANTOS'
/*
REPLACE(TEXTO, STRING_A_SUBSTITUIR, STRING_NOVA)
SUBSTITUI A STRING "STRING_A_SUBSTITUIR", EXISTENTE NA
STRING "TEXTO" PELA "STRING_NOVA"
*/
SELECT REPLACE('AGUINALDO DIOGO DOS SANTOS', 'AGUINALDO', 'AGNALDO')
-- 'AGNALDO DIOGO DOS SANTOS'
/*
REPLICATE(TEXTO, N)
RETORNA O TEXTO, REPLICADO N VEZES
*/
SELECT REPLICATE('*',10)
--'**********'
SELECT REPLICATE('AR',2)
--'ARAR'
/*
REVERSE(TEXTO)
RETORNA O TEXTO, ESCRITO DA DIREITA PARA A ESQUERDA
*/
SELECT REVERSE('AGNALDO')
--'ODLANGA'
SELECT REVERSE('AGNALDO DIOGO DOS SANTOS')
--'SOTNAS SOD OGOID ODLANGA'
/*
SOUNDEX(TEXTO)
RETORNA UM CÓDIGO DE 4 POSIÇÕES QUE REPRESENTA A STRING "TEXTO"
*/
SELECT SOUNDEX('AGNALDO')
--'A254'
SELECT SOUNDEX('AGUINALDO')
--'A254'
/*
SPACE(N)
RETORNA UMA STRING COM N ESPAÇOS
*/
SELECT SPACE(10)
--' '
SELECT 'AGNALDO' + SPACE(10) + ' SANTOS'
--'AGNALDO SANTOS'
/*
STR(N, X, DECIMAIS)
RETORNA O NÚMERO N CONVERTIDO EM STRING DE X POSIÇÕES,
COM A QUANTIDADE DE CASAS DECIMAIS INFORMADO EM "DECIMAIS"
*/
SELECT STR(10)
--'10'
SELECT STR(123.456,8,2)
--'123.46'
SELECT STR(123.456,8,2),
STR(123.456,5,3),
STR(123.456,4,3),
STR(123.456,3,3),
STR(123.456,2,3)
--'123.46', '123.5', '123', '123', '**'
/*
STUFF(TEXTO, X, Y, TEXTO_A_INSERIR)
APAGA DA STRING "TEXTO" OS Y CARACTERES A PARTIR DA POSIÇÃO X
E OS SUBSTITUI POR "TEXTO_A_INSERIR"
*/
SELECT STUFF('AGNALDO DIOGO DOS SANTOS', 1, 7, 'CAIO CÉSAR'),
REPLACE('AGNALDO DIOGO DOS SANTOS', 'AGNALDO', 'CAIO CÉSAR')
--'CAIO CÉSAR DIOGO DOS SANTOS', 'CAIO CÉSAR DIOGO DOS SANTOS'
SELECT STUFF('123.456.789.01', 12, 1, '-'),
REPLACE('123.456.789.01', '.', '-')
--'123.456.789-01', '123-456-789-01'
/*
SUBSTRING(TEXTO, POSICAO_INICIAL, COMPRIMENTO)
RETORNA UMA STRING COM O COMPRIMENTO DEFINIDO EM "COMPRIMENTO",
EXTRAÍDA DA STRING "TEXTO", A PARTIR DA "POSICAO_INICIAL"
*/
SELECT SUBSTRING('AGNALDO DIOGO DOS SANTOS', 1, 7)
--'AGNALDO'
SELECT SUBSTRING('AGNALDO DIOGO DOS SANTOS', 9, 5)
--'DIOGO'
SELECT SUBSTRING('AGNALDO DIOGO DOS SANTOS', 15, 3)
--'DOS'
SELECT SUBSTRING('AGNALDO DIOGO DOS SANTOS', 19, 6)
--SANTOS
SELECT SUBSTRING('AGNALDO DIOGO DOS SANTOS', 9)
--ERRO 174: The substring function requires 3 arguments.
--EM ALGUMAS LINGUAGENS, QUANDO NÃO SE FORNECE O COMPRIMENTO,
--O RETORNO É A STRING EXTRAÍDA A PARTIR DA POSIÇÃO INFORMADA,
--ATÉ O ÚLTIMO CARACTERE – ISSO NÃO ACONTECE COM O S
/*
ASCII(TEXTO)
RETORNA O CÓDIGO ASCII DO PRIMEIRO
CARACTERE DO TEXTO PASSADO PARA A FUNÇÃO
(SÓ USADO EM CHAR E VARCHAR)
*/
SELECT ASCII('A')
--65
SELECT ASCII('ABACATE')
--65
SELECT NOME, ASCII(NOME) FROM PESSOA
/*
NOME
---------- -----------
BRUNO 66
ANTONIO 65
PEDRO 80
AGNALDO 65
ANA 65
MARIA 77
MARIANA 77
ANA MARIA 65
*/
/*
UNICODE(TEXTO)
RETORNA O CÓDIGO UNICODE DO PRIMEIRO
CARACTERE DO TEXTO PASSADO PARA A FUNÇÃO
*/
SELECT UNICODE('A')
--65
SELECT UNICODE('ABACATE')
--65
SELECT NOME, ASCII(NOME) FROM PESSOA
/*
NOME
---------- -----------
BRUNO 66
ANTONIO 65
PEDRO 80
AGNALDO 65
ANA 65
MARIA 77
MARIANA 77
ANA MARIA 65
*/
/*
CHAR(NUMERO)
RETORNA O CARACTERE QUE TEM O CÓDIGO ASCII INFORMADO
SE O CÓDIGO NÃO EXISTIR (FOR MAIOR QUE 255
OU MENOR QUE 0), RETORNA NULL
*/
SELECT CHAR(65)
--'A'
SELECT CHAR(97)
--'a'
/*
NCHAR(NUMERO)
RETORNA O CARACTERE QUE TEM O CÓDIGO UNICODE INFORMADO
SE O CÓDIGO NÃO EXISTIR (FOR MAIOR QUE 65535
OU MENOR QUE 0), RETORNA NULL
*/
SELECT NCHAR(65)
--'A'
SELECT NCHAR(97)
--'a'
/*
CHARINDEX(STRING_A_SER_PESQUISADA, TEXTO)
RETORNA A POSIÇÃO INICIAL ONDE A STRING
"STRING_A_SER_PESQUISADA" FOI ENCONTRADA
NO TEXTO
SE A STRING NÃO FOR ENCONTRADA, A FUNÇÃO RETORNA ZERO
*/
SELECT CHARINDEX('A', 'AGNALDO')
--1
SELECT CHARINDEX('O', 'AGNALDO')
--7
SELECT CHARINDEX('X', 'AGNALDO')
--0
/*
LEFT(TEXTO, N)
RETORNA OS PRIMEIROS N CARACTERES (DA ESQUERDA) DO
TEXTO PASSADO PARA A FUNÇÃO
*/
SELECT LEFT('AGNALDO DIOGO DOS SANTOS', 7)
--'AGNALDO'
/*
RIGHT(TEXTO, N)
RETORNA OS ÚLTIMOS N CARACTERES (DA DIREITA) DO
TEXTO PASSADO PARA A FUNÇÃO
*/
SELECT RIGHT('AGNALDO DIOGO DOS SANTOS', 6)
--'SANTOS'
SELECT RIGHT('AGNALDO DIOGO DOS SANTOS ', 6)
--'ANTOS '
/*
LEN(TEXTO)
RETORNA O COMPRIMENTO DO TEXTO INFORMADO
*/
SELECT LEN('AGNALDO D. DOS SANTOS')
--21
SELECT LEN('AGNALDO D. DOS SANTOS ')
--21
SELECT LEN(NULL)
--NULL
SELECT LEN(123456)
--6
/*
LOWER(TEXTO)
RETORNA O TEXTO, EM MINÚSCULAS
*/
SELECT LOWER('AGNALDO DIOGO DOS SANTOS')
--'agnaldo diogo dos santos'
/*
UPPER(TEXTO)
RETORNA O TEXTO, EM MAIÚSCULAS
*/
SELECT UPPER('Agnaldo Diogo dos Santos')
--'AGNALDO DIOGO DOS SANTOS'
/*
LTRIM(TEXTO)
RETORNA O TEXTO SEM OS ESPAÇOS EM BRANCO DA ESQUERDA
*/
SELECT LTRIM(' AGNALDO DIOGO DOS SANTOS ')
--'AGNALDO DIOGO DOS SANTOS '
/*
RTRIM(TEXTO)
RETORNA O TEXTO SEM OS ESPAÇOS EM BRANCO DA DIREITA
*/
SELECT RTRIM(' AGNALDO DIOGO DOS SANTOS ')
-- ' AGNALDO DIOGO DOS SANTOS'
/*
REPLACE(TEXTO, STRING_A_SUBSTITUIR, STRING_NOVA)
SUBSTITUI A STRING "STRING_A_SUBSTITUIR", EXISTENTE NA
STRING "TEXTO" PELA "STRING_NOVA"
*/
SELECT REPLACE('AGUINALDO DIOGO DOS SANTOS', 'AGUINALDO', 'AGNALDO')
-- 'AGNALDO DIOGO DOS SANTOS'
/*
REPLICATE(TEXTO, N)
RETORNA O TEXTO, REPLICADO N VEZES
*/
SELECT REPLICATE('*',10)
--'**********'
SELECT REPLICATE('AR',2)
--'ARAR'
/*
REVERSE(TEXTO)
RETORNA O TEXTO, ESCRITO DA DIREITA PARA A ESQUERDA
*/
SELECT REVERSE('AGNALDO')
--'ODLANGA'
SELECT REVERSE('AGNALDO DIOGO DOS SANTOS')
--'SOTNAS SOD OGOID ODLANGA'
/*
SOUNDEX(TEXTO)
RETORNA UM CÓDIGO DE 4 POSIÇÕES QUE REPRESENTA A STRING "TEXTO"
*/
SELECT SOUNDEX('AGNALDO')
--'A254'
SELECT SOUNDEX('AGUINALDO')
--'A254'
/*
SPACE(N)
RETORNA UMA STRING COM N ESPAÇOS
*/
SELECT SPACE(10)
--' '
SELECT 'AGNALDO' + SPACE(10) + ' SANTOS'
--'AGNALDO SANTOS'
/*
STR(N, X, DECIMAIS)
RETORNA O NÚMERO N CONVERTIDO EM STRING DE X POSIÇÕES,
COM A QUANTIDADE DE CASAS DECIMAIS INFORMADO EM "DECIMAIS"
*/
SELECT STR(10)
--'10'
SELECT STR(123.456,8,2)
--'123.46'
SELECT STR(123.456,8,2),
STR(123.456,5,3),
STR(123.456,4,3),
STR(123.456,3,3),
STR(123.456,2,3)
--'123.46', '123.5', '123', '123', '**'
/*
STUFF(TEXTO, X, Y, TEXTO_A_INSERIR)
APAGA DA STRING "TEXTO" OS Y CARACTERES A PARTIR DA POSIÇÃO X
E OS SUBSTITUI POR "TEXTO_A_INSERIR"
*/
SELECT STUFF('AGNALDO DIOGO DOS SANTOS', 1, 7, 'CAIO CÉSAR'),
REPLACE('AGNALDO DIOGO DOS SANTOS', 'AGNALDO', 'CAIO CÉSAR')
--'CAIO CÉSAR DIOGO DOS SANTOS', 'CAIO CÉSAR DIOGO DOS SANTOS'
SELECT STUFF('123.456.789.01', 12, 1, '-'),
REPLACE('123.456.789.01', '.', '-')
--'123.456.789-01', '123-456-789-01'
/*
SUBSTRING(TEXTO, POSICAO_INICIAL, COMPRIMENTO)
RETORNA UMA STRING COM O COMPRIMENTO DEFINIDO EM "COMPRIMENTO",
EXTRAÍDA DA STRING "TEXTO", A PARTIR DA "POSICAO_INICIAL"
*/
SELECT SUBSTRING('AGNALDO DIOGO DOS SANTOS', 1, 7)
--'AGNALDO'
SELECT SUBSTRING('AGNALDO DIOGO DOS SANTOS', 9, 5)
--'DIOGO'
SELECT SUBSTRING('AGNALDO DIOGO DOS SANTOS', 15, 3)
--'DOS'
SELECT SUBSTRING('AGNALDO DIOGO DOS SANTOS', 19, 6)
--SANTOS
SELECT SUBSTRING('AGNALDO DIOGO DOS SANTOS', 9)
--ERRO 174: The substring function requires 3 arguments.
--EM ALGUMAS LINGUAGENS, QUANDO NÃO SE FORNECE O COMPRIMENTO,
--O RETORNO É A STRING EXTRAÍDA A PARTIR DA POSIÇÃO INFORMADA,
--ATÉ O ÚLTIMO CARACTERE – ISSO NÃO ACONTECE COM O S
/*
@@DATEFIRST
RETORNA OU ATRIBUI O VALOR PARA O PRIMEIRO DIA DA SEMANA
*/
SELECT @@DATEFIRST
--7 à DOMINGO
SELECT DATEPART(DW, GETDATE()), GETDATE()
--2, 2006-06-05 21:14:15.840
SET DATEFIRST 1 --SEGUNDA
SELECT DATEPART(DW, GETDATE()), GETDATE()
--1, 2006-06-05 21:14:15.840
SET DATEFIRST 7 --DOMINGO
/*
@@DBTS
RETORNA O VALOR DO ÚLTIMO VALOR TIMESTAMP USADO NO DATABASE ATIVO
UM NOVO TIMESTAMP É GERADO QUANDO UMA COLUNA DO TIPO TIMESTAMP É
INSERIDA OU ATUALIZADA
*/
USE MASTER
SELECT @@DBTS
--0x00000000000001FA
USE EXEMPLOS
SELECT @@DBTS
--0x0000000000000064
CREATE TABLE EX_TS
(
COD INT,
TS TIMESTAMP
)
INSERT INTO EX_TS(COD) VALUES (1)
SELECT * FROM EX_TS
/*
COD TS
1 0x0000000000000065
*/
SELECT @@DBTS
--0x0000000000000065
/*
@@LANGUAGE
ESPECIFICA A LINGUAGEM UTILIZADA NA SESSÃO.
ESSA LINGUAGEM DEFINE O FORMATO DE DATA E
AS MENSAGENS RETORNADAS PELO SQL SERVER
AS LINGUAGENS FICAM ARMAZENADAS NA TABELA DO CATÁLOGO
DO SISTEMA SYSLANGUAGES
*/
SELECT * FROM MASTER..SYSLANGUAGES
/*
--DIVERSAS LINHAS DE TABELA
*/
SELECT @@LANGUAGE
--US_ENGLISH
CREATE TABLE EX_DATA
(
DATA DATETIME
)
INSERT INTO EX_DATA VALUES('15/12/2006') -- DMY
--ERRO 242: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
INSERT INTO EX_DATA VALUES('12/15/2006') --MDY
--1 row(s) affected
SELECT DATENAME(MM, GETDATE())
--JUNE
SELECT DATENAME(DW, GETDATE())
--MONDAY
SET LANGUAGE 'Português (Brasil)'
--Changed language setting to Português (Brasil).
INSERT INTO EX_DATA VALUES('15/12/2006') -- DMY
--1 row(s) affected
INSERT INTO EX_DATA VALUES('12/15/2006') --MDY
--ERRO 242: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
SELECT DATENAME(MM, GETDATE())
--JUNHO
SELECT DATENAME(DW, GETDATE())
--SEGUNDA-FEIRA
SET LANGUAGE 'US_ENGLISH'
--Changed language setting to us_english.
/*
@@LANGID
RETORNA O ID DA LINGUAGEM UTILIZADA NA SESSÃO.
*/
SET LANGUAGE 'Português (Brasil)'
--Changed language setting to Português (Brasil).
SELECT @@LANGID
--27
SET LANGUAGE 'US_ENGLISH'
--Changed language setting to us_english.
SELECT @@LANGID
--0
/*
@@LOCK_TIMEOUT
RETORNA O TEMPO (EM MILISSEGUNDOS) QUE O SQL SERVER
ESPERA UM RECURSO SER LIBERADO DE UM LOCK. SE O TEMPO DE ESPERA
ATINGIR O TEMPO DEFINIDO EM @@LOCK_TIMEOUT, UM ERRO É GERADO
*/
SELECT @@LOCK_TIMEOUT
-- -1 ? NÃO SETADO
CREATE TABLE EX_LT
(
COD INT
)
BEGIN TRAN
INSERT INTO EX_LT VALUES (1)
--EM OUTRA JANELA DO QUERY ANALYSER (ABRA COM CTRL+N), EXECUTE OS COMANDOS ABAIXO:
SET LOCK_TIMEOUT 5000 --5 SEGUNDOS
--The command(s) completed successfully.
SELECT @@LOCK_TIMEOUT
--5000
SELECT * FROM EX_LT --UM ERRO É GERADO APÓS 5 SEGUNDOS
--ERRO 1222: Lock request time out period exceeded.
ROLLBACK TRAN --DESFAZ A TRANSAÇÃO
/*
@@MAX_CONNECTIONS
RETORNA O NÚMERO MÁXIMO DE CONEXÕES SIMULTÂNEAS ACEITAS PELO SQL SERVER
*/
SELECT @@MAX_CONNECTIONS
--32767
/*
@@MAX_PRECISION
RETORNA A PRECISÃO MÁXIMA PARA DATATYPES DECIMAL E NUMERIC
*/
SELECT @@MAX_PRECISION
-- 38 à É O VALOR DEFAULT DO SQL SERVER
/*
@@NESTLEVEL
INDICA O NÍVEL DE ANINHAMENTO DA PROCEDURE ATUAL
QUANDO O VALOR CHEGA EM 32, A TRANSAÇÃO É TERMINADA
*/
SELECT @@NESTLEVEL
--0
CREATE PROC P3
AS
SELECT @@NESTLEVEL AS 'NIVEL DE P3'
GO
CREATE PROC P2
AS
SELECT @@NESTLEVEL AS 'NIVEL DE P2'
EXEC P3
GO
CREATE PROC P1
AS
SELECT @@NESTLEVEL AS 'NIVEL DE P1'
EXEC P2
GO
EXEC P1
/*
NIVEL DE P1
-----------
1
NIVEL DE P2
-----------
2
NIVEL DE P3
-----------
3
*/
/*
@@SERVERNAME
RETORNA O NOME DO SERVIDOR
*/
SELECT @@SERVERNAME
--SERVIDOR
/*
@@SERVICENAME
RETORNA O NOME DO SERVIÇO SQL
*/
SELECT @@SERVICENAME
--MSSQLSERVER
/*
@@SPID
RETORNA O ID DO PROCESSO ATUAL (SPID = SERVER PROCESS IDENTIFIER)
*/
SELECT @@SPID
--51
/*
@@VERSION
RETORNA A VERSÃO DO SQL
*/
SELECT @@VERSION
/*
Microsoft SQL Server 2000 - 8.00.194 (Intel X86)
Aug 6 2000 00:57:48
Copyright (c) 1988-2000 Microsoft Corporation
Developer Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
*/
/*
DB_NAME(ID)
RETORNA O NOME DO DATABASE QUE TEM O ID FORNECIDO
*/
SELECT DB_NAME(1)
--MASTER
/*
DB_ID(NOME)
RETORNA O ID DE UM DATABASE, A PARTIR DO NOME FORNECIDO
*/
SELECT DB_ID('MASTER')
--1
/*
OBJECT_NAME(ID)
RETORNA O NOME DO OBJETO QUE TEM O ID FORNECIDO
*/
SELECT OBJECT_NAME(1)
--SYSOBJECTS
/*
OBJECT_ID(NOME)
RETORNA O ID DE UM OBJETO, A PARTIR DO NOME FORNECIDO
*/
SELECT OBJECT_ID('SYSOBJECTS')
--1
/*
COL_NAME(ID_DA_TABELA, POSICAO_DA_COLUNA)
RETORNA O NOME DA COLUNA QUE OCUPA A POSIÇÃO
"POSICAO_DA_COLUNA" NA TABELA QUE TEM O ID
*/
SELECT COL_NAME(OBJECT_ID('PESSOA'), 1)
--NOME
/*
HAS_DBACCESS(NOME_DO_DATABASE)
RETORNA 1 SE O USUÁRIO LOGADO TIVER ACESSO AO DATABASE,
0 SE NÃO TIVER ACESSO OU NULL SE O NOME DO DATABASE FOR
INVÁLIDO
*/
SELECT HAS_DBACCESS('MASTER')
--1
SELECT HAS_DBACCESS('BANCO_QUE_O_USUARIO_NAO_TEM_ACESSO')
--0
SELECT HAS_DBACCESS('BANCO_INEXISTENTE')
--NULL
/*
SUSER_SID(NOME_DO_USUARIO)
RETORNA O ID DO USUÁRIO INFORMADO
*/
SELECT SUSER_SID('SA')
--0X01
SELECT SUSER_SID('PAULISTA21\ADMINISTRATOR')
--0x010500000000000515000000D22AA026BC35C0275F38CD1AF4010000
SELECT SUSER_SID('USUARIO_INEXISTENTE')
--NULL
/*
SUSER_SNAME(ID_DO_USUARIO)
RETORNA O NOME DO USUÁRIO INFORMADO
SE NENHUM ID DE USUÁRIO FOR PASSADO PARA A FUNÇÃO,
RETORNA O NOME DO USUÁRIO LOGADO
*/
SELECT SUSER_SNAME()
--SA
SELECT SUSER_SNAME(0X01)
--SA
SELECT SUSER_SNAME(0X0123)
--NULL ? NÃO EXISTE USUÁRIO COM O ID 0X0123
/*
USER
RETORNA O NOME DO USUÁRIO LOGADO NO DATABASE EM USO
*/
SELECT USER
--DBO
/*
USER_ID(NOME_DO_USUARIO)
RETORNA O ID DO USUÁRIO INFORMADO PARA O DATABASE EM USO
SE NENHUM ID DE USUÁRIO FOR PASSADO PARA A FUNÇÃO,
RETORNA O NOME DO USUÁRIO LOGADO
*/
SELECT USER_ID('DBO')
--1
SELECT USER_ID()
--1
SELECT USER_ID('SA')
--NULL
SELECT USER_ID('USUARIO_INEXISTENTE')
--NULL
/*
APP_NAME()
RETORNA O NOME DA APLICAÇÃO QUE ESTÁ EXECUTANDO O COMANDO
*/
SELECT APP_NAME()
--SQL Query Analyzer
/*
CAST(EXPRESSAO AS DATATYPE)
CONVERTE UMA EXPRESSÃO NO DATATYPE INFORMADO
*/
SELECT CAST(1.1234 AS DECIMAL(10,2))
--1.12
SELECT CAST(GETDATE() AS VARCHAR)
--Jun 7 2006 9:58PM
/*
CONVERT(DATATYPE, EXPRESSAO, ESTILO)
CONVERTE UMA EXPRESSÃO NO DATATYPE INFORMADO
SE A EXPRESSÃO ORIGINAL FOR UMA DATA, PODEMOS USAR
UM ESTILO DE FORMATAÇÃO
*/
SELECT CONVERT(DECIMAL(10,2), 1.1234)
--1.12
SELECT CONVERT(VARCHAR, GETDATE())
--Jun 7 2006 9:58PM
SELECT CONVERT(VARCHAR, GETDATE(), 103)
--07/06/2006
SELECT CONVERT(VARCHAR, GETDATE(), 3)
--07/06/06
SELECT CONVERT(VARCHAR, GETDATE(), 108)
--21:58:12
/*
COALESCE(LISTA_DE_EXPRESSOES)
RETORNA O PRIMEIRO VALOR NÃO NULO DA LISTA
*/
SELECT COALESCE(NULL, 'AGNALDO', 'BRUNO', 'NETINHO', 'PEDRO')
--AGNALDO
SELECT COALESCE('BRUNO', 'NETINHO', 'PEDRO', NULL, 'AGNALDO')
--BRUNO
SELECT APELIDO, NOME, COALESCE(APELIDO, NOME) FROM PESSOA
/*
APELIDO NOME
---------- ---------- ----------
AGNALDINHO BRUNO AGNALDINHO
NETINHO ANTONIO NETINHO
B- PEDRO B-
OGRO AGNALDO OGRO
BANANA ANA BANANA
VARETA MARIA VARETA
NULL MARIANA MARIANA
NULL ANA MARIA ANA MARIA
*/
/*
CURRENT_TIMESTAMP
RETORNA A DATA E HORA ATUAIS
EQUIVALENTE AO GETDATE()
*/
SELECT CURRENT_TIMESTAMP
--2006-06-07 22:14:41.513
/*
CURRENT_USER
RETORNA O USUÁRIO CONECTADO AO DATABASE
EQUIVALENTE AO USER_NAME()
*/
SELECT CURRENT_USER
--DBO
/*
DATALENGTH(EXPRESSAO)
RETORNA O NÚMERO DE BYTES USADOS PARA ARMAZENAR A EXPRESSÃO
*/
SELECT DATALENGTH('AGNALDO')
--7 à ASCII
SELECT DATALENGTH(N'AGNALDO')
--14 à UNICODE
SELECT DATALENGTH(1234)
--4 à DATATYPE INT
SELECT DATALENGTH(GETDATE())
--8
/*
@@ERROR
RETORNA O NÚMERO DO ERRO OCORRIDO NA ÚLTIMA LINHA EXECUTADA
ZERO É EXECUÇÃO COM SUCESSO - NÚMEROS DIFERENTES DE ZERO SÃO ERROS
*/
SELECT 1/0
--ERRO 8134 - Divide by zero error encountered.
SELECT @@ERROR
--8134
SELECT 1/1
--1
SELECT @@ERROR
--0
/*
FN_HELPCOLLATIONS()
RETORNA A LISTA COM TODOS OS COLLATIONS SUPORTADOS PELO SQL SERVER 2000
*/
SELECT * FROM ::FN_HELPCOLLATIONS()
/*
NAME DESCRIPTION
------------------------------- -----------------------------------
ALBANIAN_BIN ALBANIAN, BINARY SORT
ALBANIAN_CI_AI ALBANIAN, CASE-INSENSITIVE, ACC...
ALBANIAN_CI_AI_WS ALBANIAN, CASE-INSENSITIVE, ACC...
... (SÃO 753 LINHAS)
SQL_SWEDISHPHONE_PREF_CP1_CI_AS FINNISH-SWEDISH, CASE-INSENSITI...
SQL_SWEDISHSTD_PREF_CP1_CI_AS FINNISH-SWEDISH, CASE-INSENSITI...
SQL_UKRAINIAN_CP1251_CI_AS UKRAINIAN, CASE-INSENSITIVE, AC...
*/
/*
HOST_ID()
RETORNA O ID DA ESTAÇÃO QUE ESTÁ ACESSANDO O SQL SERVER
*/
SELECT HOST_ID()
--1952
/*
HOST_NAME()
RETORNA O NOME DA ESTAÇÃO QUE ESTÁ ACESSANDO O SQL SERVER
*/
SELECT HOST_NAME()
--INSTRUTOR21
/*
@@IDENTITY
RETORNA O ÚLTIMO VALOR IDENTITY INSERIDO
(PODE SER EM QUALQUER TABELA QUE TENHA UMA COLUNA
IDENTITY - NÃO TEM COMO ESCOLHER A TABELA DESEJADA)
*/
SELECT @@IDENTITY
--NULL
CREATE TABLE EX_ID
(
NUMERO INT IDENTITY,
TEXTO VARCHAR(10)
)
INSERT INTO EX_ID VALUES('ABC')
INSERT INTO EX_ID VALUES('XYZ')
INSERT INTO EX_ID VALUES('XPTO')
SELECT @@IDENTITY
--3
CREATE TABLE EX_ID2
(
NUMERO INT IDENTITY,
TEXTO VARCHAR(10)
)
INSERT INTO EX_ID2 VALUES('ABC')
INSERT INTO EX_ID2 VALUES('XYZ')
SELECT @@IDENTITY
--2 à O ÚLTIMO INSERT FOI NA TABELA EX_ID2 E O VALOR INSERIDO FOI 2
/*
ISNULL(EXPRESSAO, NOVO_VALOR)
SE A EXPRESSÃO "EXPRESSÃO" FOR NULL, O VALOR "NOVO_VALOR"
É RETORNADO, SENÃO, O RETORNO É A PRÓPRIA EXPRESSÃO
*/
SELECT ISNULL(GETDATE(), '1900-01-01')
--2006-06-07 22:50:18.107
DECLARE @NUMERO INT
SELECT @NUMERO AS VALOR_ORIGINAL, ISNULL(@NUMERO, 0) AS VALOR_TRATADO
/*
VALOR_ORIGINAL VALOR_TRATADO
-------------- -------------
NULL 0
*/
DECLARE @NUM INT
SET @NUM = 10
SELECT @NUM AS VALOR_ORIGINAL, ISNULL(@NUM, 0) AS VALOR_TRATADO
/*
VALOR_ORIGINAL VALOR_TRATADO
-------------- -------------
10 10
*/
/*
ISNUMERIC(EXPRESSAO)
RETORNA 1 SE A EXPRESSÃO FOR NUMÉRICA E ZERO SE NÃO FOR
*/
SELECT GETDATE(), ISNUMERIC(GETDATE())
/*
----------------------- -----------
2006-06-07 22:53:50.670 0
*/
SELECT 50, ISNUMERIC(50)
/*
------- -------
50 1
*/
SELECT PI(), ISNUMERIC(PI())
/*
------------------ -------
3.1415926535897931 1
*/
/*
NEWID()
RETORNA UM NOVO VALOR DO TIPO UNIQUEIDENTIFIER
*/
SELECT NEWID()
--5CF8F155-6CAF-4C1E-8F52-2DB9BF03CE13
SELECT NEWID()
--24A506F0-23BA-4C9A-9512-F9CFF93265BA
/*
NULLIF(EXPRESSAO_01, EXPRESSAO_02)
RETORNA NULO SE AS DUAS EXPRESSÕES FOREM EQUIVALENTES
SE NÃO FOREM, RETORNA A PRIMEIRA EXPRESSÃO
*/
SELECT NULLIF(1,1)
--NULL
SELECT NULLIF(1,2)
--1
SELECT NULLIF(2,1)
--2
SELECT CONVERT(VARCHAR, GETDATE(), 103),
NULLIF(CONVERT(VARCHAR, GETDATE(), 103), '07/06/2006')
----------- ------
07/06/2006 NULL
/*
PARSENAME(OBJETO, PARTE)
RETORNA A PARTE DO NOME DE UM OBJETO, DESDE QUE
TENHA SIDO QUALIFICADO
*/
SELECT PARSENAME('EXEMPLOS.DBO.PESSOA', 1) AS 'NOME DO OBJETO'
--PESSOA
SELECT PARSENAME('EXEMPLOS.DBO.PESSOA', 2) AS 'PROPRIETÁRIO DO OBJETO'
--DBO
SELECT PARSENAME('PESSOA', 2) AS 'PROPRIETÁRIO DO OBJETO'
--NULL
SELECT PARSENAME('EXEMPLOS.DBO.PESSOA', 3) AS 'NOME DO DATABASE'
--EXEMPLOS
SELECT PARSENAME('PAULISTA21.EXEMPLOS.DBO.PESSOA', 4) AS 'NOME DO SERVIDOR'
--PAULISTA21
SELECT PARSENAME('EXEMPLOS.DBO.PESSOA', 4) AS 'NOME DO SERVIDOR'
--NULL
/*
@@ROWCOUNT
RETORNA A QUANTIDADE DE LINHAS AFETADAS PELO
ÚLTIMO COMANDO EXECUTADO
*/
SELECT @@ROWCOUNT
--0
SELECT * FROM PESSOA
/*
NOME APELIDO
---------- ----------
BRUNO AGNALDINHO
ANTONIO NETINHO
PEDRO B-
AGNALDO OGRO
ANA BANANA
MARIA VARETA
MARIANA NULL
ANA MARIA NULL
*/
SELECT @@ROWCOUNT
--8
/*
ROWCOUNT_BIG()
RETORNA UM BIGINT COM A QUANTIDADE DE LINHAS AFETADAS PELO
ÚLTIMO COMANDO EXECUTADO
*/
SELECT ROWCOUNT_BIG()
--8