Dúvidas com DATEPART() e GETDATE()
:!: Olá pessoal.... bom eu sou novo no forum e em sql, mais gostaria de saber em qual mês estou e tomar como base o dia primeiro desse determinado mês sem precisar alterar a instrução toda as vezes, o caso é o seguinte:
-----------------------------------------------------------------------------------
SELECT .........
FROM SD2010
WHERE .....
AND D2_EMISSAO BETWEEN [b:d69f863f8a][u:d69f863f8a]´20070401´[/u:d69f863f8a][/b:d69f863f8a] AND GETDATE()
-----------------------------------------------------------------------------------
bom acho que é isso, desde já agradeço a todo mundo que poder ajudar falows. :!:
-----------------------------------------------------------------------------------
SELECT .........
FROM SD2010
WHERE .....
AND D2_EMISSAO BETWEEN [b:d69f863f8a][u:d69f863f8a]´20070401´[/u:d69f863f8a][/b:d69f863f8a] AND GETDATE()
-----------------------------------------------------------------------------------
bom acho que é isso, desde já agradeço a todo mundo que poder ajudar falows. :!:
Talvane
Curtidas 0
Respostas
Wagnerbianchi
21/04/2007
Olá amigão,
Gostei muito dessa sua dúvida...algo intrigante.
Bom, o máximo que consegui me aproximar foi isso:
...são mais de 00:00h e amanhã tem trabalho.
Voltarei aqui paa continuar essa discussão!
Talvez eu faça uma função e usamos esta para facilitar as coisas!
Um abraço!
Gostei muito dessa sua dúvida...algo intrigante.
Bom, o máximo que consegui me aproximar foi isso:
SELECT CONVERT(CHAR(4), YEAR(GETDATE())) + CONVERT(CHAR(2), MONTH(GETDATE())) + CONVERT(CHAR(2), DAY(GETDATE()))
...são mais de 00:00h e amanhã tem trabalho.
Voltarei aqui paa continuar essa discussão!
Talvez eu faça uma função e usamos esta para facilitar as coisas!
Um abraço!
GOSTEI 0
Talvane
21/04/2007
Wagnerbianchi, pow cara velews pela ajuda, mais usando essa instrução eu retornaria o dia atual desse determinado mês, mais valeu pela ajuda.
GOSTEI 0
Marconogueira
21/04/2007
-----------------------------------------------------------------
Vc já deve ter a resposta, mas se ainda não tiver, tá aí.
Se quiser tenho funções para o último dia do mês também,
independente se for ano bissexto.
Falow.
------------------------------------------------------------------
DECLARE @dt_inicial SMALLDATETIME
SET @dt_inicial = CONVERT(SMALLDATETIME, CONVERT(CHAR(4),DATEPART(yyyy, GETDATE())) + ´-´ + CONVERT(CHAR(2),DATEPART(mm, GETDATE())) + ´-´ + ´01´)
SELECT .........
FROM SD2010
WHERE .....
AND D2_EMISSAO BETWEEN @dt_inicial AND GETDATE()
Vc já deve ter a resposta, mas se ainda não tiver, tá aí.
Se quiser tenho funções para o último dia do mês também,
independente se for ano bissexto.
Falow.
------------------------------------------------------------------
DECLARE @dt_inicial SMALLDATETIME
SET @dt_inicial = CONVERT(SMALLDATETIME, CONVERT(CHAR(4),DATEPART(yyyy, GETDATE())) + ´-´ + CONVERT(CHAR(2),DATEPART(mm, GETDATE())) + ´-´ + ´01´)
SELECT .........
FROM SD2010
WHERE .....
AND D2_EMISSAO BETWEEN @dt_inicial AND GETDATE()
GOSTEI 0
Talvane
21/04/2007
Marconogueira, bom cara acho que essa é a melhor maneira de fazer a instrução, contudo fiz outra maneira mais longa mais deu certo mais vou testar essa sua que é bem mais curta do que a qual eu fiz. O resultado eu posto aqui...odbrigado...valews.
GOSTEI 0
Psergio.p
21/04/2007
Caros amigos,
seria isso:
SELECT CONVERT(VARCHAR(4),YEAR(GETDATE())) +
CASE WHEN MONTH(GETDATE()) < 10 THEN ´0´ + CONVERT(VARCHAR(1),MONTH(GETDATE()))
ELSE CONVERT(VARCHAR(2),MONTH(GETDATE())) END + ´01´
seria isso:
SELECT CONVERT(VARCHAR(4),YEAR(GETDATE())) +
CASE WHEN MONTH(GETDATE()) < 10 THEN ´0´ + CONVERT(VARCHAR(1),MONTH(GETDATE()))
ELSE CONVERT(VARCHAR(2),MONTH(GETDATE())) END + ´01´
GOSTEI 0
Emerson Nascimento
21/04/2007
ou ainda mais fácil:
basta você subtrair, da data atual, o dia -1.
por exemplo: supondo que hoje seja dia 23/04/2007. como encotrar o dia primeiro do 04? basta subtrair da data atual o dia - 1 (23 - 1)
então seria
[b:5123b29c94]23[/b:5123b29c94]/04/2007 - ([b:5123b29c94]23[/b:5123b29c94] -1) =
23/04/2007 - 22 =
01/04/2007
a instrução deverá ser:
SELECT .........
FROM SD2010
WHERE .....
AND D2_EMISSAO BETWEEN (GETDATE() - (DAY(GETDATE())-1)) AND GETDATE()
basta você subtrair, da data atual, o dia -1.
por exemplo: supondo que hoje seja dia 23/04/2007. como encotrar o dia primeiro do 04? basta subtrair da data atual o dia - 1 (23 - 1)
então seria
[b:5123b29c94]23[/b:5123b29c94]/04/2007 - ([b:5123b29c94]23[/b:5123b29c94] -1) =
23/04/2007 - 22 =
01/04/2007
a instrução deverá ser:
SELECT .........
FROM SD2010
WHERE .....
AND D2_EMISSAO BETWEEN (GETDATE() - (DAY(GETDATE())-1)) AND GETDATE()
GOSTEI 0
Psergio.p
21/04/2007
Perceba que o campo D2_EMISSAO não é um campo do tipo DATETIME, e mais um detalhe, pra que fazer conta se o primeiro dia do é sempre 1? O que ele precisa é sabe o mês atual.
GOSTEI 0
Emerson Nascimento
21/04/2007
:!: Olá pessoal.... bom eu sou novo no forum e em sql, mais gostaria de saber em qual mês estou e tomar como base o dia primeiro desse determinado mês sem precisar alterar a instrução toda as vezes, o caso é o seguinte:
-----------------------------------------------------------------------------------
SELECT .........
FROM SD2010
WHERE .....
AND D2_EMISSAO BETWEEN [b:9cf85071ee][u:9cf85071ee]´20070401´[/u:9cf85071ee][/b:9cf85071ee] AND GETDATE()
-----------------------------------------------------------------------------------
bom acho que é isso, desde já agradeço a todo mundo que poder ajudar falows. :!:
psergio.p, creio que o campo D2_EMISSAO é um campo do tipo DATETIME, sim.
outra coisa: pelo que eu ENTENDI, vendo a instrução passada acima, ele quer saber sobre o movimento do ínicio do mês até o dia atual, ou seja, o movimento do mês atual.
pode ser da forma que eu havia passado (que se assemelha à instrução passada na questão):
[b:9cf85071ee]SELECT .........
FROM SD2010
WHERE .....
AND D2_EMISSAO BETWEEN (GETDATE() - (DAY(GETDATE())-1)) AND GETDATE()[/b:9cf85071ee]
a instrução acima irá trazer os registros onde D2_EMISSAO esteja entre o 1º dia do mês e o dia atual.
ou desta outra forma:
[b:9cf85071ee]Select .........
From SD2010
Where .....
and convert(varchar(6), D2_EMISSAO, 112) = convert(varchar(6), GetDate(), 112)[/b:9cf85071ee]
a instrução acima irá trazer os registros onde mês e ano de D2_EMISSAO seja igual a mês e ano da data atual.
[...] e mais um detalhe, pra que fazer conta se o primeiro dia do é sempre 1?
simples: hoje é dia 18/05/2007. como você faria pra montar a data 01/05/2007? fazendo a conta...
assim pode obter BETWEEN ´200705[b:9cf85071ee]01[/b:9cf85071ee]´ AND ´20070518´
GOSTEI 0
Marcelo.bastos
21/04/2007
Emerson.en,
você pode utilizar a seguinte sintaxe para obter o primeiro dia de qualquer mês posterior ou anterior que acredito ser bastante interessante.
SELECT DATEADD(mm, -1, GETDATE()) - DAY(GETDATE()) + 1
O parâmetro ´-1´ é a quantidade de meses que quero retornar e o ´+1´ no final é para obter o primeiro dia do mês. Caso você queira obter o último dia do mês está sintaxe também pode ser utilizada apenas retirando o ´+1´ que está no final dela.
você pode utilizar a seguinte sintaxe para obter o primeiro dia de qualquer mês posterior ou anterior que acredito ser bastante interessante.
SELECT DATEADD(mm, -1, GETDATE()) - DAY(GETDATE()) + 1
O parâmetro ´-1´ é a quantidade de meses que quero retornar e o ´+1´ no final é para obter o primeiro dia do mês. Caso você queira obter o último dia do mês está sintaxe também pode ser utilizada apenas retirando o ´+1´ que está no final dela.
GOSTEI 0
Marcelo.bastos
21/04/2007
Ops... desculpa ai é Talvane e não Emerson.en.
Marcelo Bastos
Marcelo Bastos
GOSTEI 0
Psergio.p
21/04/2007
Pessoal, este campo é usando no banco de dados do sistema microsiga e não é armazenando como datetime, é armazenado como VARCHAR seguindo o seguinte padrão AAAAMMDD.
Experiência própria.
Experiência própria.
GOSTEI 0