Dúvidas com DATEPART() e GETDATE()

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: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

Respostas

26/04/2007

Wagnerbianchi

Olá amigã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!


Responder Citar

26/04/2007

Talvane

Wagnerbianchi, pow cara velews pela ajuda, mais usando essa instrução eu retornaria o dia atual desse determinado mês, mais valeu pela ajuda.


Responder Citar

02/05/2007

Marconogueira

-----------------------------------------------------------------
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()


Responder Citar

03/05/2007

Talvane

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.


Responder Citar

11/05/2007

Psergio.p

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´


Responder Citar

18/05/2007

Emerson

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()


Responder Citar

18/05/2007

Psergio.p

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.


Responder Citar

18/05/2007

Emerson

:!: 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´


Responder Citar

12/08/2007

Marcelo.bastos

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.


Responder Citar

12/08/2007

Marcelo.bastos

Ops... desculpa ai é Talvane e não Emerson.en.

Marcelo Bastos


Responder Citar

12/08/2007

Psergio.p

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.


Responder Citar