Ir para conteúdo

Dicas para sentenças SQL


Posts Recomendados


  • Tópicos Que Criei:  884
  • Tópicos/Dia:  0.13
  • Meu Conteúdo:  8.799
  • Conteúdo/Dia:  1.34
  • Reputação:   289
  • Pontos/Conquistas:  106.246
  • Conteúdo Resolvido:  0
  • Dias Ganho:  185
  • Status:  Offline
  • Idade:  51
  • Dispositivo:  Linux

Dicas de SQL:

Como, em uma sentença SQL, pegar uma data e transforma-la sempre no primeiro dia do mesmo mes e ano ?

-- Usando GetDate

Select Getdate() as Get_Date, DateAdd(day, -(datepart(day, getdate())-1), getdate()) as DT_Tradad

-- ou

-- usando uma variável de data

Declare @DataX DateTime
Set @DataX = '2009-07-20'
Select @DataX as Data_X, DateAdd(day, -(datepart(day, @DataX)-1), @DataX) as DT_Tradada

Mais dicas, aos poucos vamos postando aqui...

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  19
  • Conteúdo/Dia:  0.00
  • Reputação:   1
  • Pontos/Conquistas:  96
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline

Legal essa dica.

Vou ver algumas aqui pra colocar pra vocês também.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  61
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  659
  • Conteúdo/Dia:  0.11
  • Reputação:   1
  • Pontos/Conquistas:  3.883
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  41

apenas complementando sobre datas, friso o comando datediff, muito util para cálculo com datas, exemplo:

declare @data datetime

set @data = '20091201'

select datepart(day,@data) --SELECIONA APENAS O DIA DA DATA

select datepart(month,@data) --SELECIONA APENAS O MES DA DATA

select datepart(year,@data) --SELECIONA APENAS O ANO DA DATA

ele retorna valores inteiros, ou seja, disponíveis para calculos....

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  30
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  103
  • Conteúdo/Dia:  0.02
  • Reputação:   2
  • Pontos/Conquistas:  812
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline

Bom deste exemplo!!

Como faço pra buscas o último dia do mês em determinada data?!

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  134
  • Tópicos/Dia:  0.02
  • Meu Conteúdo:  1.225
  • Conteúdo/Dia:  0.19
  • Reputação:   2
  • Pontos/Conquistas:  7.399
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Dispositivo:  Windows

Soma 1 no mes , força dia 1o nesse mes, ai diminui um dia da data.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  30
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  103
  • Conteúdo/Dia:  0.02
  • Reputação:   2
  • Pontos/Conquistas:  812
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline

Soma 1 no mes , força dia 1o nesse mes, ai diminui um dia da data.

Valeu.. Apenas incluir -1 na senteça que traz último dia do mês anterior!!

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  15
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  285
  • Conteúdo/Dia:  0.05
  • Reputação:   1
  • Pontos/Conquistas:  1.548
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  40
  • Dispositivo:  Windows

Último dia do mês e ano de uma data

A consulta abaixo retorna a data com o ultimo dia do mês e ano da data de desligamento do funcionário

SQL SERVER:

Select dateadd(day, -day(datademissao), dateadd(month,1,datademissao)) from pfunc

- É possível criar uma função no sql sever para ser executada da mesma forma que a função no Oracle

ORACLE:

Select last_day(datademissao) from pfunc

http://www.forumrm.com.br/index.php?showtopic=1364&hl=

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  192
  • Tópicos/Dia:  0.03
  • Meu Conteúdo:  1.767
  • Conteúdo/Dia:  0.27
  • Reputação:   2
  • Pontos/Conquistas:  10.702
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  51

apenas complementando sobre datas, friso o comando datediff, muito util para cálculo com datas, exemplo:

declare @data datetime

set @data = '20091201'

select datepart(day,@data) --SELECIONA APENAS O DIA DA DATA

select datepart(month,@data) --SELECIONA APENAS O MES DA DATA

select datepart(year,@data) --SELECIONA APENAS O ANO DA DATA

ele retorna valores inteiros, ou seja, disponíveis para calculos....

Oi Lugão ... vc FRISOU mas não exemplificou ... rsrsrs

declare @data1 datetime
declare @data2 datetime

set @data1 = '20091201'
set @data2 = '20091231'

select datepart(day,@data1)   --SELECIONA APENAS O DIA DA DATA1
select datepart(month,@data1) --SELECIONA APENAS O MES DA DATA1
select datepart(year,@data1)  --SELECIONA APENAS O ANO DA DATA1

select datediff (day, @data1, @data2)	-- MOSTRA A DIFERENÇA EM 'DIAS' ENTRE DATA1 E DATA2
select datediff (day, GETDATE(), @data2) -- MOSTRA A DIFERENÇA EM 'DIAS' ENTRE HOJE E A DATA2

Rodando todo o script acima dá pra ver exatamente o que o Lugão quis dizer ...

Outras opções:

Parâmetro - Abreviação

year - yy, yyyy

quarter - qq, q

month - mm, m

dayofyear - dy, y

day - dd, d

week - wk, ww

Hour - hh

minute - mi, n

second - ss, s

millisecond - ms

:)

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  19
  • Conteúdo/Dia:  0.00
  • Reputação:   1
  • Pontos/Conquistas:  96
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline

Tá ai, como prometido.

Em um Cubo, se você quiser colocar o código e o nome de uma tabela pra mostrar juntos, basta fazer assim:

Select CodColigada, CodFilial, NomeFantasia, 
	(cast(CodFilial as varchar) + ' - ' + isnull(NomeFantasia, 'Filial sem nome')) as Filial
From Gfilial Order by CodColigada, CodFilial

Usei o Cast para transformar o campo CodfFilial em varchar para poder juntar com os outros campos

e o ISNull é para não dar erro caso o campo Filial esteja em branco ou nulo.

bjs

Monica

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  19
  • Conteúdo/Dia:  0.00
  • Reputação:   1
  • Pontos/Conquistas:  96
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline

Ah, o retorno, ficaria assim:

1, 1, Matriz, 1 - Matriz

1, 2, Filial BH, 2 - Filial BH

1, 3, Filial Rio de Janeiro, 3 - Filial Rio de Janeiro

1, 4, Filial São Paulo, 4 - Filial São Paulo

1, 5, Filial Brasilia, 5 - Filial Brasilia

Bem melhor pra usar nos cubos este ultimo campo do que código e nome separados.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  5
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  90
  • Conteúdo/Dia:  0.02
  • Reputação:   0
  • Pontos/Conquistas:  507
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  48

Uma outra dica também é o uso de parametros de um relatorio para o uso em data na sentença:

Ex.

SELECT ISNULL(SUM(PFFINANC.VALOR),0) FROM PFFINANC INNER JOIN

PFUNC ON PFFINANC.CHAPA = PFUNC.CHAPA INNER JOIN

PEVENTO ON PFFINANC.CODEVENTO = PEVENTO.CODIGO

WHERE (PEVENTO.PROVDESCBASE = 'P') AND

(PFFINANC.MESCOMP =:MES_COMPETENCIA) AND

(PFFINANC.ANOCOMP =:ANO_COMPETENCIA) AND

(PFFINANC.NROPERIODO = '2') AND

(PFUNC.CODSECAO LIKE '01.01%') AND

(PFUNC.DATADEMISSAO < convert(varchar(4),:ANO_COMPETENCIA)+'/'+ convert(varchar(2),:MES_COMPETENCIA)+'/'+convert(varchar(2),'01'))

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  13
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  85
  • Conteúdo/Dia:  0.02
  • Reputação:   0
  • Pontos/Conquistas:  528
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  112

Descobrindo o ultimo dia do mês, é bastante interessante e prático:

Ultimo dia do mês passado

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))

LastDay_Previous Month

Ultimo dia do mês corrente

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))

LastDay_CurrentMonth

Ultimo dia do próximo mês

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0))

LastDay_NextMonth

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  30
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  103
  • Conteúdo/Dia:  0.02
  • Reputação:   2
  • Pontos/Conquistas:  812
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline

Descobrindo o ultimo dia do mês, é bastante interessante e prático:

Ultimo dia do mês passado

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))

LastDay_Previous Month

Ultimo dia do mês corrente

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))

LastDay_CurrentMonth

Ultimo dia do próximo mês

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0))

LastDay_NextMonth

Excelente!

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  30
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  103
  • Conteúdo/Dia:  0.02
  • Reputação:   2
  • Pontos/Conquistas:  812
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline

Como eu consigo buscar informações a X meses atrás?!

Exemplo:

Existe um parâmetro que indica a data: 01/07/2009

Preciso buscar todos lançamentos que venceram a 2 meses desta data!!!

Então, seria todos lançamentos vencidoes em Maio de 2009 (de 01/05/2009 a 31/05/2009)

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  13
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  85
  • Conteúdo/Dia:  0.02
  • Reputação:   0
  • Pontos/Conquistas:  528
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  112

Como eu consigo buscar informações a X meses atrás?!

Exemplo:

Existe um parâmetro que indica a data: 01/07/2009

Preciso buscar todos lançamentos que venceram a 2 meses desta data!!!

Então, seria todos lançamentos vencidoes em Maio de 2009 (de 01/05/2009 a 31/05/2009)

Vid,

Eu postei uma sentença a poucos dias que traz mais ou menos isso...tente adaptar a mesma a sua necessidade. Busque por "total por fornecedor em consulta SQL".

Mas neste caso, recomendo a abrir um novo tópico em Suporte, pois este tópico é sobre dicas.

Link para comentar
Compartilhar em outros sites

Participe da conversa

Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.

Visitante
Responder esse tópico

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Seu link foi automaticamente inserido no corpo do post.   Exibir como um link

×   Seu conteúdo anterior foi restaurado.   Limpar conteúdo do editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Criar Novo...

Informação Importante

Usando este site, você concorda com nossos Termos de Uso e nossa Política de Privacidade.