Arquivo

Posts Tagged ‘Microsoft SQL Server 2008 R2’

Converter e/ou Formatar no Microsoft SQL Server

30 de maio de 2017 Deixe um comentário

Tenho um campo do tipo SmallDateTime contendo 2017-05-30 16:16:10.730.

Desejo os seguintes resultados:

GetDate yyyymmdd yyyy-mm-dd dd/mm/yyyy
2017-05-30 16:16:10.730 20170530 2017-05-30 30/05/2017

 

Solução:

Para resolver este problema usei a função CONVERT passando o parâmetro style, ele será o responsável por apresentar o resultado da conversão com um formato de exibição.

Cada código do style indica um formato, mais informações na documentação T-SQL.

 

Syntax for CONVERT: CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

 

Comando:

select getdate() AS ‘GetDate’

     , convert(varchar(10), getdate(), 112)  AS DateFormat_ISO_Long
     , convert(varchar(10), getdate(), 126)  AS DateFormat_ISO8601_Long
     , convert(varchar(10), getdate(), 103) AS DateFormat_British_French_Long

 


Desejo a Data e Hora SEM espacos

GetDate yyyy-mm-ddThh:mm:ss.mmmZ
2017-05-30 16:16:10.730 2017-05-30T16:16:10.730

 

Solução:

select getdate() AS ‘GetDate’
    
     , convert(varchar(19), getdate(), 126)  AS DateFormat_ISO8601_Long — (no spaces)


Desejo a Hora com formados diferentes

GetDate hh:mm hh:mm:ss hh:mm:ss.mmm
2017-05-30 16:16:10.730 16:16 16:16:10 16:16:10.730

 

Solução:

select getdate() AS ‘GetDate’

     
     , convert(varchar(5), getdate(), 114) AS HoraMinuto
     , convert(varchar(8), getdate(), 114) AS HoraMinutoSegundo
     , convert(varchar(12), getdate(), 114) AS HoraMinutoSegundoMilisegundo

SQL Server Management Studio (SSMS) Free – Nova Versão 16.5

14 de novembro de 2016 Deixe um comentário

Esta versão do SSMS disponível é gratuita e não requer uma licença do SQL Server para instalação e uso.

 

O SSMS (SQL Server Management Studio) é um ambiente integrado para acessar, configurar, gerenciar, administrar e desenvolver todos os componentes do SQL Server. O SSMS combina um amplo grupo de ferramentas gráficas com vários editores de script avançados para fornecer acesso ao SQL Server para desenvolvedores e administradores de todos os níveis de conhecimento. Esta versão conta com compatibilidade aprimorada com versões anteriores do SQL Server, um instalador da Web independente e notificações do sistema no SSMS quando novas versões estiverem disponíveis.

 

Versões do SSMS não localizadas para o inglês exigem o pacote de atualização de segurança da base de dados 2862966 se a instalação for realizada em: Windows 8, Windows 7, Windows Server 2012 e Windows Server 2008 R2.

image

download Baixar o SQL Server Management Studio (SSMS)

Baixar o SQL Server Management Studio (16.5)

Esta versão do SSMS pode ser instalada nos seguintes idiomas:
Chinês (República Popular da China) | Chinês (Taiwan) | Inglês (Estados Unidos) | Francês
Alemão | Italiano | Japonês | Coreano | Português (Brasil) | Russo | Espanhol

 

Fonte: Baixar o SQL Server Management Studio (SSMS)

Como completar sequência de “n” números pulados?

17 de abril de 2015 2 comentários

Tenho uma tabela de Cadastro de Vendedor, porém com o CODIGO pulado.

Seq_Number_Pulado_Range_Faixa

Como completar o cadastro com os números pulados, até um “n” limite?

CODIGO NOME
001 João
002 VENDEDOR 002
003 Maria
004 Ricardo
005 Silvia
006 VENDEDOR 006
007 VENDEDOR 007
008 Marcos
009 VENDEDOR 009
010 Antonio
… ATÉ
049 VENDEDOR 049
050 Carlos
… ATÉ
299 VENDEDOR 299
300 Externo – Carlos
301 Externo – Juliana
… ATÉ
308 EXTERNO – 308
309 Externo – Renato
… ATÉ
399 EXTERNO – 399

Sabemos que:

a) O último código que desejamos inserir é 399.

b) Quando o código for menor que 300, o campo NOME deve ser VENDEDOR + CODIGO

c) Quando o código for maior que 300, o campo NOME deve ser EXTERNO + CODIGO

 

Problema:

Como encontrar as faixas/ranges de códigos pulados que são:

[2]; [6,7]; [9]; [11..49]; [51..299]; [302..307]; [310..399]

 

Solução:

Criaremos uma sequência completa de códigos [1..399].

Depois, vamos subtrair os códigos já cadastrados da lista completa.

Sobrando os códigos pulados.

Agora é só inserir os código pulados na tabela de Cadastro de Vendedores.

 

O detalhe está em na criação da tal lista completa de 1 até 399, para isso existem diversas possibilidades.

Fica a pergunta:

E se o último valor for 1.000.000?

Precisamos escrever um comando rápido e dinânico.

Para isso, publiquei Como criar uma tabela contendo uma sequência de "n" números?


Vamos aos comandos:

 

PRINT ‘
Preparando o cenário
======================’
CREATE TABLE #Tab_Vendedor (
Codigo CHAR(3),
Nome VARCHAR(100)
)

INSERT INTO #Tab_Vendedor VALUES(‘001’, ‘João’)
INSERT INTO #Tab_Vendedor VALUES(‘003’, ‘Maria’)
INSERT INTO #Tab_Vendedor VALUES(‘004’, ‘Ricardo’)
INSERT INTO #Tab_Vendedor VALUES(‘005’, ‘Silvia’)
INSERT INTO #Tab_Vendedor VALUES(‘008’, ‘Marcos’)
INSERT INTO #Tab_Vendedor VALUES(‘010’, ‘Antonio’)
INSERT INTO #Tab_Vendedor VALUES(‘050’, ‘Carlos’)
INSERT INTO #Tab_Vendedor VALUES(‘300’, ‘Externo – Carlos’)
INSERT INTO #Tab_Vendedor VALUES(‘301’, ‘Externo – Juliana’)
INSERT INTO #Tab_Vendedor VALUES(‘309’, ‘Externo – Renato’)

PRINT ‘
PASSO 1 – Lista de CODIGO cadastrados
==========’
SELECT * FROM #Tab_Vendedor

Seq_Number_Pulado_Range_Faixa

PRINT ‘
PASSO 2 – Lista com a sequência completa de 1 até 399
==========’
CREATE TABLE #Tab_Sequencia(
  Numero INT
)

DECLARE @Qtde_Numeros int, @Limite_Recursividade int
SET @Qtde_Numeros = 399
SET @Limite_Recursividade = 0

EXEC (
‘WITH n(n) AS
(
    SELECT 1
    UNION ALL
    SELECT n+1 FROM n WHERE n < ‘ + @Qtde_Numeros + ‘
)
INSERT INTO #Tab_Sequencia
SELECT n FROM n ORDER BY n
OPTION (MAXRECURSION ‘ + @Limite_Recursividade + ‘)’
)

SELECT * FROM #Tab_Sequencia

PRINT ‘
PASSO 3 – Comparar as duas listas, subtrair os códigos já cadastrados da lista completa.

==========’

SELECT S.Numero
FROM  #Tab_Sequencia S
WHERE S.Numero NOT IN (SELECT V.Codigo FROM #Tab_Vendedor V WHERE S.Numero = V.Codigo)

PRINT ‘
PASSO 4 – Usar o resultado encontrado para cadastrar na Tabela de Vendedores.
==========’

INSERT INTO #Tab_Vendedor (Codigo, Nome)
SELECT Codigo = RIGHT(‘000’ + CONVERT(VARCHAR(3),S.Numero), 3)
     , Nome = (CASE WHEN S.Numero <= 300 THEN ‘VENDEDOR ‘ ELSE ‘EXTERNO – ‘ END)
              + RIGHT(‘000’ + CONVERT(VARCHAR(3),S.Numero), 3)
FROM  #Tab_Sequencia S
WHERE S.Numero NOT IN (SELECT V.Codigo FROM #Tab_Vendedor V WHERE S.Numero = V.Codigo)

SELECT * FROM #Tab_Vendedor ORDER BY Codigo

Seq_Number_Pulado_Range_Faixa_Completa

DROP TABLE #Tab_Sequencia
DROP TABLE #Tab_Vendedor

Como criar uma tabela contendo uma sequência de "n" números?

17 de abril de 2015 1 comentário

Vamos usar a tabela temporária, chamada: #TabelaSequencia

O resultado desejado é:

SELECT n FROM #TabelaSequencia

Seq_Number

Solução A: Usar repetidos comandos ( manualmente )
=================================================
Quando a quantidade de “n” valores é pequena.

CREATE TABLE #TabelaSequencia(n INT)
GO

INSERT INTO #TabelaSequencia(n)
SELECT 1
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6
UNION
SELECT 7
UNION
SELECT 8
UNION
SELECT 9
UNION
SELECT 10

SELECT n FROM #TabelaSequencia
GO

DROP TABLE #TabelaSequencia
GO

 


 

Solução B: Usar um laço ( loop )
=================================================
Quando a quantidade de “n” valores é grande.
Usando o WHILE no caso n=10, mas poderia ser n=10000

CREATE TABLE #TabelaSequencia(n INT)
GO

WHILE (SELECT ISNULL(MAX(n),0) FROM #TabelaSequencia) < 10
BEGIN
INSERT INTO #TabelaSequencia(n)
SELECT ISNULL(MAX(n),0) + 1 FROM #TabelaSequencia
END
GO

SELECT * FROM #TabelaSequencia
GO

DROP TABLE #TabelaSequencia
GO


 

Solução C: Usar recursividade
=================================================
Quando a quantidade de “n” valores é grande.
Usando o MAXRECURSION no caso n=10, mas poderia ser n=10000

WITH #TabelaSequencia(n) AS
(
SELECT 1
UNION ALL
SELECT n+1 FROM #TabelaSequencia WHERE n < 10
)

SELECT n FROM #TabelaSequencia ORDER BY n
OPTION (MAXRECURSION 10)
GO

 

Caso a quantidade de “n” valores for maior que 32767
Será exibido o aviso de erro:

Msg 310, Level 15, State 1, Line 10
The value 32768 specified for the MAXRECURSION option exceeds the allowed maximum of 32767.

Para resolver  troque o limite (MAXRECURSION 32768) para ZERO (MAXRECURSION 0)

Fonte: http://sqlperformance.com/2013/01/t-sql-queries/generate-a-set-1


 

Faça testes de desempenho/performance, com cada solução, para os limites de “n”:

n n n n n n n
1 1 1 1 1 1 1
2 2 2 2 2 2 2
3 3 3 3 32768 32768 32768
4
5
6
7
8
9
10 100 1000 10000 50000 100000 1000000

SQL Server – Resolver Erro de Divisão por Zero

16 de janeiro de 2015 Deixe um comentário

Use o código de exemplo, abaixo.

 

PRINT ‘=============================’
PRINT ‘Variáveis’
PRINT ‘=============================’
declare @dividend float =2
declare @divisor float = 0

 

PRINT ‘=============================’
PRINT ‘Problema – Erro’
PRINT ‘=============================’
SELECT Dividendo = @dividend
     , Divisor   = @divisor
     , Resultado = @dividend/@divisor

 

PRINT ‘=============================’
PRINT ‘Solução 1’
PRINT ‘=============================’
SELECT COALESCE(@dividend / NULLIF(@divisor,0), 0)

SELECT Dividendo = @dividend
     , Divisor   = @divisor
     , Resultado = COALESCE(@dividend / NULLIF(@divisor,0), 0)

Converter decimal em hora – Parte 1

26 de setembro de 2014 Deixe um comentário

Usando o Microsoft SQL Server procurei uma função para converter um decimal em horas.

Então o caminho padrão seria usar o CAST ou Convert, porém não é possível converter um decimal diretamente para tipo data/hora, conforme gráfico abaixo:

fonte: http://technet.microsoft.com/en-us/library/ms187928(v=sql.100).aspx

 

O problema:

 

Temos um valor = 10 horas trabalhadas

Calculando 25% das 10 horas o resultado é 2.5 horas, ou seja, duas horas e meia.

Aqui está nosso problema 2.5 é um decimal e desejamos sua representação em horas:minutos, logo o resultado final deve ser 2:30.

 

O que fazer?

 

Resposta 1:

Como esse número é apresentado em Data/Hora?
O retorno da conversão direta é 12:00, sendo que o esperado é 02:30

select CONVERT(SMALLDATETIME, 2.50)

 

Quanto 2,50 representa de 1 dia, ou seja, 24 horas?
O retorno é 0.104166

select 2.50/24

 

Como esse é o novo número apresentado em Data/Hora?
O retorno da conversão é 02:30, conforme desejado.
Porém o veio a data 1900-01-01

select CONVERT(SMALLDATETIME, 2.50/24)

 

Com extrair somente a hora:minuto:segundo?

SELECT CONVERT(NVARCHAR,
                                                CONVERT(SMALLDATETIME, 2.50/24)
                            , 108)

 

Quando informado o 108, para converte o SmallDateTime para NVARCHAR.
Estamos indicando o Style, indicado na sintaxe de Remarks
Conforme descrito em http://technet.microsoft.com/en-us/library/ms187928(v=sql.100).aspx

 

Créditos:

http://www.scriptbrasil.com.br/forum/topic/168005-resolvido-converter-decimal-para-hora/

Alterar chave de instalação do SQL2008R2

21 de abril de 2011 4 comentários

Sempre que desejamos conhecer um novo software, instalamos a versão de demonstração ( trial ). Em determinado tempo essa versão de demonstração expira e o software é bloqueado ou tem suas funções limitadas.

No caso abaixo tenho uma versão do Microsoft SQL Server 2008 R2 Trial que foi bloqueada.

a1

Após comprar do produto, temos em mãos a chave de instalação ( Product Key ou Serial Number ) que libera novamente o software.

 

Como instalar a nova chave?

1. Execute novamente o setup.exe

2. No SQL Server Installation Center, selecione Maintenance, depois Edition Upgrade

a2

3. Clique Next duas vezes, então informe a nova chave

a3

4. Continue com Next e Install, aguarde alguns minutos até concluir.

Leia o original deste post.