Array
(
)

Dúvidas com DATEPART() e GETDATE()

Talvane
   - 21 abr 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 [u:d69f863f8a]´20070401´[/u:d69f863f8a] AND GETDATE()
-----------------------------------------------------------------------------------
bom acho que é isso, desde já agradeço a todo mundo que poder ajudar falows. :!:

Wagnerbianchi
   - 26 abr 2007

Olá amigão,

Gostei muito dessa sua dúvida...algo intrigante.

Bom, o máximo que consegui me aproximar foi isso:
#Código

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!

Talvane
   - 26 abr 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.

Marconogueira
   - 02 mai 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()

Talvane
   - 03 mai 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.

Psergio.p
   - 11 mai 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´

Emerson
   - 18 mai 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
23/04/2007 - (23 -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()

Psergio.p
   - 18 mai 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.

Emerson
   - 18 mai 2007


Citação:
:!: 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 [u:9cf85071ee]´20070401´[/u: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):
SELECT .........
FROM SD2010
WHERE .....
AND D2_EMISSAO BETWEEN (GETDATE() - (DAY(GETDATE())-1)) AND GETDATE()
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:
Select .........
From SD2010
Where .....
and convert(varchar(6), D2_EMISSAO, 112) = convert(varchar(6), GetDate(), 112)
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.

Citação:
[...] 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 ´20070501´ AND ´20070518´

Marcelo.bastos
   - 12 ago 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.

Marcelo.bastos
   - 12 ago 2007

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

Marcelo Bastos

Psergio.p
   - 12 ago 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.