SQL GO!!!

select 'Blog focado em SQL Server' from blog where nome ='SQLGO.wordpress.com'

Arquivos da Categoria: DesenvolvimentoSQL

Cast e Convert

 

Para trabalhar com a conversão de dados é necessário que os tipos de dados sejam compatíveis entre si, como por exemplo, o numero 1 pode ser representado como smallint ou como bigint.

Cast é uma função do padrão ANSI e Convert é uma função do engine do SQL Server. Convert pode ser utilizado para formatação de valores do tipo datetime e money.

 

Sintaxe

Cast – CAST (expression AS data_type [ (length ) ] )

Convert – CONVERT (data_type [ (length ) ] ,expression [ ,style ] )

 

Conversão implícita – O engine do Sql Server realiza a conversão de forma automática sem especificar a função Cast ou Convert.

 

DECLARE @Num1 AS INT = 10000000,@Num2 AS TINYINT=3

–O SQL Server realizou a conversão automaticamente, o tinyint inicia do 0 ate 255

SELECT @Num1+@Num2

image

 

Conversão explicita – É necessário especificar a função Cast ou Convert.

SELECT GETDATE() AS ‘Valor sem converter’

SELECT CAST(GETDATE() AS TIME) as ‘CAST’

SELECT CONVERT(TIME, GETDATE()) as ‘CONVERT’

 

image

 

A imagem abaixo mostra todas as conversões de tipos de dados explícitas e implícitas que são permitidas para tipos de dados fornecidos pelo sistema SQL Server

 

Data type conversion table

 

Estilos de data e hora

O Convert também pode ser utilizado para formatar dados do tipo datetime e money, nesse caso é necessário especificar a formatação desejada.

 

SELECT CONVERT( VARCHAR, GETDATE(),111) as ‘111’

SELECT CONVERT( VARCHAR, GETDATE(),113) as ‘113’

SELECT CONVERT( VARCHAR, GETDATE(),108) as ‘108’

 

image

 

Lista de estilos disponíveis para campos do tipo datetime.

 

image

 

Saiba mais

CAST e CONVERT (Transact-SQL)

 

[]’s

Andressa Martins

Usando o comando MERGE

 

Um dos novos comandos do SQL Server 2008 é o merge, com esse comando podemos comparar registros entre duas fontes de dados (origem e destino). Você pode utilizar as ações de Insert, Update e Delete baseados no resultado da comparação entre as duas fontes.

 

Sintaxe:

INTO <target_table>Define a tabela ou view que será a fonte de destino.

AS – Define um alias.
 
USING <table_source> – Define a tabela ou view que será fonte de origem, baseado na condicao de merge da tabela destino com a tabela de origem.
 
ON <merge_search_condition>Define as condições de “Join” da tabela destino com a tabela origem.
 
WHEN MATCHED THEN – Define a ação a ser realizada quando há linhas na fonte de destino origem que correspondem com a fonte de origem.
 
WHEN NOT MATCHED [ BY TARGET ] THEN – Define a ação a ser realizada quando não há linhas da fonte de origem que correspondem com a fonte de destino. 
 

WHEN NOT MATCHED BY SOURCE THEN Define a ação a ser realizada quando há linhas na fonte de destino, mas não há linhas correspondentes na fonte de origem.

 

Exemplo

CREATE TABLE #Tabela1 ( Nome VARCHAR (100)

                                       , Cadastro DATETIME

                                       , Alteracao DATETIME

                                       , Ativo BIT)

INSERT #Tabela1

VALUES (‘Andressa’, GETDATE(), NULL, 1),

            (‘Joao’, GETDATE(), NULL, 1),

            (‘Maria’, GETDATE(), NULL, 1),

            (‘Ana’, GETDATE(), NULL, 1)

CREATE TABLE #Tabela2 ( Nome VARCHAR(100)

                                       , Twitter VARCHAR(100))

INSERT #Tabela2

VALUES (‘Andressa’,‘@dre_martins’),

            (‘Marieta’,‘@Marieta’),

            (‘Joaquim’,‘@Joaquim’),

            (‘José’,‘@jose’)

SELECT * FROM #Tabela1

SELECT * FROM #Tabela2

 
 

image

Agora vamos ao comando merge:

 

MERGE #Tabela1 AS Destino

USING #Tabela2 AS Origem

ON Destino.Nome = Origem.Nome

— Há registro no destino e na origem

WHEN MATCHED

THEN UPDATE SET Ativo = 0, Alteracao = GETDATE()

–Quando não há registro no destino e há na origem

WHEN NOT MATCHED

THEN INSERT (Nome, Cadastro, Ativo) VALUES (Origem.Nome, Getdate(),1)

–Quando  há registro no destino mas não há na origem

–e que sejam diferente de João

 

WHEN NOT MATCHED BY SOURCE AND Nome <>‘Joao’

THEN UPDATE SET Ativo = NULL, Alteracao = GETDATE();

SELECT * FROM #Tabela1

SELECT * FROM #Tabela2

 

Resultado:

image

 

Saiba mais

MERGE (Transact-SQL)

 

[]’s

Andressa Martins