Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[MSSQL] Query met datum berekening

Pagina: 1
Acties:

  • Gumball
  • Registratie: December 2003
  • Niet online
Tweakers,

ik moet een query maken die een variabele datum vergelijkt met een bestaande datum + een aantal maanden. Die aantal maanden moet uit een ander veld komen van de record met de bestaande datum

voorbeeld:

IDPASSEERDATUMRVP
112-1-20085
21-1-20072



Bij record 1 moet ik dus de variable datum vergelijken met 12-1-2008 + 5 maand.

Ik heb al gekeken naar de dateadd functie, echter kan ik nergens vinden of je het toe te voegen gedeelte ook uit 't record kan halen waar ook de datum zelf in staat.

Passeer_datum is overigens een datetime en rentevast een decimal.

[ Voor 27% gewijzigd door Gumball op 16-05-2008 15:07 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
SQL:
1
Select id, dateadd(d, passeer_datum, rentevast_periode) from mytable

:?
DATEADD
Returns a new datetime value based on adding an interval to the specified date.

Syntax
DATEADD ( datepart , number, date )

Arguments
datepart

Is the parameter that specifies on which part of the date to return a new value. The table lists the dateparts and abbreviations recognized by Microsoft® SQL Server™.

Datepart Abbreviations
Yearyy, yyyy
quarterqq, q
Monthmm, m
dayofyeardy, y
Daydd, d
Weekwk, ww
Hourhh
minutemi, n
secondss, s
millisecondms


number

Is the value used to increment datepart. If you specify a value that is not an integer, the fractional part of the value is discarded. For example, if you specify day for datepart and1.75 for number, date is incremented by 1.

date

Is an expression that returns a datetime or smalldatetime value, or a character string in a date format. For more information about specifying dates, see datetime and smalldatetime.

If you specify only the last two digits of the year, values less than or equal to the last two digits of the value of the two digit year cutoff configuration option are in the same century as the cutoff year. Values greater than the last two digits of the value of this option are in the century that precedes the cutoff year. For example, if two digit year cutoff is 2049 (default), 49 is interpreted as 2049 and 2050 is interpreted as 1950. To avoid ambiguity, use four-digit years.

Return Types
Returns datetime, but smalldatetime if the date argument is smalldatetime.

[ Voor 91% gewijzigd door RobIII op 16-05-2008 15:11 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • remco_k
  • Registratie: April 2002
  • Laatst online: 12:04

remco_k

een cassettebandje was genoeg

Bijna een te simpele vraag:
http://dev.mysql.com/doc/...ns.html#function_date-add

DATE_ADD(date,INTERVAL expr unit)
DATE_ADD(passeer_datum,rentevast_periode MONTH)

Lama, Thx RobIII, MSSQL idd... :'(

[ Voor 9% gewijzigd door remco_k op 16-05-2008 15:11 ]

Alles kan stuk.


Verwijderd

Dacht dat GOT geen afhaalbalie was RobIII :)

@remco_k

Het is MSSQL, geen MySql. MSSQL kent geen date_add

[ Voor 42% gewijzigd door Verwijderd op 16-05-2008 15:11 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
remco_k schreef op vrijdag 16 mei 2008 @ 15:09:
Bijna een te simpele vraag:
http://dev.mysql.com/doc/...ns.html#function_date-add

DATE_ADD(date,INTERVAL expr unit)
DATE_ADD(passeer_datum,rentevast_periode MONTH)
MSSQL ;)
Verwijderd schreef op vrijdag 16 mei 2008 @ 15:09:
Dacht dat GOT geen afhaalbalie was RobIII :)
Dat is het ook niet; hij heeft de vergelijking nog steeds niet ;) Daarbij post ik een stuk uit de BOL zodat hij kan zien dat het met een decimal niet (zomaar) gaat werken.

Daarentegen is het wél de bedoeling dat je constructief en behulpzaam post; en dat zie ik in jouw bericht niet terug ;)

[ Voor 44% gewijzigd door RobIII op 16-05-2008 15:13 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Voor meer informatie over de functie DATEADD voor Sql Server 2005 zie
http://msdn.microsoft.com/en-us/library/ms186819.aspx

Beter RobIII? Natuurlijk is het antwoord allang gegeven :) maar daar gaat het niet om!

  • Gumball
  • Registratie: December 2003
  • Niet online
SQL:
1
Select id from product_dossier where dateadd(m, passeer_klaar, rvp) = '8-12-2007' 

Werkt in ieder geval niet.

Heb DECIMAL ondertussen gewijzigd in INT

  • remco_k
  • Registratie: April 2002
  • Laatst online: 12:04

remco_k

een cassettebandje was genoeg

Gumball schreef op vrijdag 16 mei 2008 @ 15:28:
SQL:
1
Select id from product_dossier where dateadd(m, passeer_klaar, rvp) = '8-12-2007' 

Werkt in ieder geval niet.

Heb DECIMAL ondertussen gewijzigd in INT
Handig dat je ook even vermeld wat de foutmelding is en wat je eraan probeerde te doen om het op te lossen.
Nee, natuurlijk werkt dat niet. (en het ligt niet aan de kolom rvp).
Kijk nog eens goed naar de transact-SQL syntax;
SQL:
1
DATEADD (datepart , number, date )


En: een string is geen datum... '8-12-2007' word nu niet gezien zoals jij denkt dat het word gezien.
Zet er maar eens '13-12-2007' voor in de plaats. Dit is dan het resultaat:
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value
Kijk even naar de CAST functie en noteer je datetime waarden altijd in ISO formaat in een string, of beter nog: geef '8-12-2007' niet als string mee maar als parameter van het type datetime ofzo. Dan heb je dit cast probleem niet.

Meer info:
Date and Time

[ Voor 78% gewijzigd door remco_k op 16-05-2008 15:46 ]

Alles kan stuk.


  • Gumball
  • Registratie: December 2003
  • Niet online
Ik zit cellen en kolommen door elkaar te halen geloof ik.

Ik moet dus een van 2 cellen een datum maken en die vergelijken met een variabele datum.

Maar als ik dan
SQL:
1
Select id, dateadd(month, rvp, passeer_klaar) AS datum from product_dossier where datum = '8-12-2007' 
doe, gaat het ook niet goed.

Invalid Column name: datum

[ Voor 4% gewijzigd door Gumball op 16-05-2008 15:56 ]


  • remco_k
  • Registratie: April 2002
  • Laatst online: 12:04

remco_k

een cassettebandje was genoeg

Yep, met mij gaat het nu ook even niet goed.
Oke, je hebt de foutmelding er nu bij ge-edit.

[ Voor 13% gewijzigd door remco_k op 16-05-2008 15:57 ]

Alles kan stuk.


  • Gumball
  • Registratie: December 2003
  • Niet online
remco_k schreef op vrijdag 16 mei 2008 @ 15:56:
[...]

Yep, met mij gaat het nu ook even niet goed.
Oke, je hebt de foutmelding er nu bij ge-edit.
Datum wordt dus nu gezien als string denk ik?

  • remco_k
  • Registratie: April 2002
  • Laatst online: 12:04

remco_k

een cassettebandje was genoeg

Gumball schreef op vrijdag 16 mei 2008 @ 15:58:
[...]


Datum wordt dus nu gezien als string denk ik?
Nee, de foutmelding zegt: "Invalid Column name: datum"
De kolom 'datum' bestaat niet, en het mooie is, hij heeft nog gelijk ook.

Edit:
Ik kan het niet meer aanzien, hier de oplossing, compleet met halve ISO notatie voor de datum (mag ook):
SQL:
1
Select id from product_dossier where dateadd(month, rvp, passeer_klaar)  = '2007-12-08'

[ Voor 35% gewijzigd door remco_k op 16-05-2008 16:03 ]

Alles kan stuk.


  • Gumball
  • Registratie: December 2003
  • Niet online
Het werkt :S Nou, bedankt, ik weet dat dit niet de bedoeling was, en ik wist eerlijk gezegt helemaal niet dat het zo makkelijk was. Hartelijk dank

  • remco_k
  • Registratie: April 2002
  • Laatst online: 12:04

remco_k

een cassettebandje was genoeg

Hmm, ik heb alweer spijt van de kant en klare oplossing.
Ik vraag me af of je nou daadwerkelijk snapt wat er misging. :'(

Alles kan stuk.

Pagina: 1