Jump to content
jafm

Data

Recommended Posts

jafm

Boas,

Como é que faço uma query que me vá buscar o 1º domingo do Mês de Maio por exemplo.?

Share this post


Link to post
Share on other sites
pikax

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
Loira

Data? 4/7/2013*

vai somando +1 no primeiro campo apos as horas chegarem a " 00 : 00 "

quando esse campo chegar a 31, volte o campo para 1 e altere o segundo campo para +1

numeros pares no 2º campo, resete para 1 quando o 1º campo tiver 30

numeros impares no 2ºcampo, resete para 1 quando o 1º campo tiver 31

exceçao:

quando o 2ºcampo se encontrar com o numero 2, resete o 1º campo quando este chegar a 28.

mande os anos bissextos dar um passeio.

Edited by Loira

"Hello guys. You don't know me, but I know you. I want to play a game. Here's what happens if you lose"

"Só erra quem produz... Mas só produz quem não tem medo de errar"

irc @Login

NickServ Acesso a Number1 autorizado

Share this post


Link to post
Share on other sites
jafm

A minha versao do sql é

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64)

Apr 22 2011 19:23:43

Copyright © Microsoft Corporation

Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)

Não percebi a tua solução Loira?

Share this post


Link to post
Share on other sites
Loira

Não percebi a tua solução Loira?

nao e a soluçao.. e a resposta ao titulo do topico "Data"

entao dei-te a data de hoje... como me disseram "amanha a tua resposta estara errada" solucionei o problema para que esteja correta ate ao fim do ano


"Hello guys. You don't know me, but I know you. I want to play a game. Here's what happens if you lose"

"Só erra quem produz... Mas só produz quem não tem medo de errar"

irc @Login

NickServ Acesso a Number1 autorizado

Share this post


Link to post
Share on other sites
pikax

@jafm Mostra o que ja' tens feito, e os resultados que esta' a dar-te.

@Loira: Bastava dizeres:

SELECT GETDATE() --Data de hoje

  • Vote 1

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
Loira

@Loira: Bastava dizeres:

SELECT GETDATE() --Data de hoje

nao fazia ideia. mas obrigado ;)


"Hello guys. You don't know me, but I know you. I want to play a game. Here's what happens if you lose"

"Só erra quem produz... Mas só produz quem não tem medo de errar"

irc @Login

NickServ Acesso a Number1 autorizado

Share this post


Link to post
Share on other sites
jafm

Ja estou a conseguir o que quero mais ou menos só me falta uma questão é colocar por defeito @Start no mes de maio

Declare @Start datetime
Set @Start='2013-05-01 00:01'
SELECT
datename(dw,dateadd(dd,-1,DATEADD(wk,
DATEDIFF(wk,0,dateadd(dd,7-datepart(day,@Start),@Start)), 0))),
dateadd(dd,-1,DATEADD(wk,
DATEDIFF(wk,0,dateadd(dd,7-datepart(day,@Start),@Start)), 0)) as domingo,
dateadd(dd,-10,DATEADD(wk,
DATEDIFF(wk,0,dateadd(dd,7-datepart(day,@Start),@Start)), 0)) as antes

Share this post


Link to post
Share on other sites
pikax

Ve se e' isto:

DECLARE @DT datetime = '2013-05-21'
DECLARE @MH int = DATEPART(MONTH,@DT)

DECLARE @da datetime = DATEADD(DAY,-DATEPART(DAY,@DT)+1,@DT)
SELECT @da,DATEPART(DW,@da)


WHILE MONTH(@da)=@MH
BEGIN
IF DATEPART(DW,@da)= 1
	BEGIN
		SELECT @da
		BREAK
	END
SET @da = DATEADD(DAY,1,@da)
END

Edited by pikax

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
Galbne_PT

Verifica este código.

SELECT DATEADD(DD, 1 - DATEPART(DW, '05-08-2013'), '05-08-2013')

Na data '05-08-2013'

05 - Mês, pode alterar para qualquer mês.

08 - Dia, tem de ser sempre 8, o primeiro domingo será sempre no máximo dia 7

2013 - Ano tambem pode alterar para qualquer ano.

Share this post


Link to post
Share on other sites
jafm

Obrigado pelas vossas soluções,

No entanto neste momento a minha preocupaçao é em poder alter o parametro do ano

alter PROCEDURE [dbo].[spDiaDaMae]
@ano int
as
Declare @Start datetime
Set @Start=@ano+'-05-01 00:01'
SELECT
dateadd(dd,-10,DATEADD(wk,DATEDIFF(wk,0,dateadd(dd,7-datepart(day,@Start),@Start)), 0)) as DiaDaMaeDE,
dateadd(dd,-1,DATEADD(wk,DATEDIFF(wk,0,dateadd(dd,7-datepart(day,@Start),@Start)), 0)) as DiaDaMaeA

para isto estou a criar um SP. Mas não estou a conseguir fazer a sintaxe correta,

Como faço para ir buscar o ano

Set @Start=@ano+'-05-01 00:01'?

Share this post


Link to post
Share on other sites
pikax

Usa DATEADD.


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
pikax

Usa a Funcao do DATEADD, para adicionar os dias, meses e anos.


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
pikax

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
jafm

coloquei da seguinte forma

alter PROCEDURE [dbo].[spDiaDaMae]
@ano datetime
as
Declare @Start datetime, @Start2 datetime
Set @Start=CAST(STR(DATEPART(year, @ano))AS DATETIME)+ '_'+'05-01 00:01'
SELECT
dateadd(dd,-10,DATEADD(wk,DATEDIFF(wk,0,dateadd(dd,7-datepart(day,@Start),@Start)), 0)) as DiaDaMaeDE,
dateadd(dd,-1,DATEADD(wk,DATEDIFF(wk,0,dateadd(dd,7-datepart(day,@Start),@Start)), 0)) as DiaDaMaeA

mas retornou o seguinte erro

Conversion failed when converting date and/or time from character string.

Share this post


Link to post
Share on other sites
pikax

foste para a primeira resposta em vez da segunda....

http://stackoverflow.com/questions/266924/create-a-date-with-t-sql/267016#267016


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
jafm

Afinal tenho mais um problema que é o dos minutos e segundos

Pois o resultado final é

2013-04-26 00:00:00.000 2013-05-05 00:00:00.000

e eu queria

2013-04-26 00:00:00.000 2013-05-05 23:59:00.000

Como faço o DateADD, é que como so tem 2 argumentos...

o codigo que tenho está assim

ALTER PROCEDURE [dbo].[spDiaDaMae]
@ano integer, @ano2 integer
as
Declare @DayOfMonth TinyInt Set @DayOfMonth = 1
Declare @Month TinyInt Set @Month = 5
Declare @Year Integer Set @Year = @ano
Declare @Hour TinyInt Set @Hour = 23
Declare @Minute TinyInt Set @Minute = 59
Declare @Start datetime, @Start2 datetime
Set @Start=DateAdd(yy, @Year-1900, 
   DateAdd(m,  @Month - 1, @DayOfMonth - 1))
SELECT
dateadd(dd,-10,DATEADD(wk,DATEDIFF(wk,0,dateadd(dd,7-datepart(day,@Start),@Start)), 0)) as DiaDaMaeDE,
dateadd(dd,-1,DATEADD(wk,DATEDIFF(wk,0,dateadd(dd,7-datepart(day,@Start),@Start)), 0)) as DiaDaMaeA

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.