Avatar billede kristianp Nybegynder
09. september 2005 - 17:43 Der er 11 kommentarer

Dato i db2

Se dette sp, jeg ønsker at gøre det samme på en DB2 7.2

http://www.eksperten.dk/spm/644462
Avatar billede kjulius Novice
10. september 2005 - 12:40 #1
UPDATE dinTabel SET ditDatofelt = ditDatofelt - 10 DAYS
Avatar billede kjulius Novice
10. september 2005 - 12:41 #2
Ups.. Dagsdato - 10 dage:

UPDATE dinTabel SET ditDatofelt = CURDATE() - 10 DAYS
Avatar billede kristianp Nybegynder
12. september 2005 - 10:49 #3
Når jeg prøver dette får jeg :

During SQL processing it returned:

SQL0440N  No function by the name "CURDATE" having compatible arguments was

found in the function path.  SQLSTATE=42884
Avatar billede arne_v Ekspert
12. september 2005 - 10:59 #4
prøv med

CURRENT TIME - 10 DAYS
Avatar billede arne_v Ekspert
12. september 2005 - 10:59 #5
og det er ikke en fejl med det mellemrum

:-)
Avatar billede kristianp Nybegynder
12. september 2005 - 11:13 #6
Det gir mig så :

SQL0182N  An expression with a datetime value or a labeled duration is not

valid.  SQLSTATE=42816


Prøvede også bare med CURRENT TIME og CURRENT DATE uden - 10 DAYS

SQL0408N  A value is not compatible with the data type of its assignment

target.  Target name is "DATE".  SQLSTATE=42821

Feltet er af typen timestamp
Avatar billede kjulius Novice
12. september 2005 - 11:39 #7
Hvis det er et felt af typen timestamp bør du caste det som sådan:

UPDATE dinTabel SET ditDatofelt = CAST(CURDATE() - 10 DAYS AS TIMESTAMP)

eller bruge CURRENT_TIMESTAMP som udgangspunkt:

UPDATE dinTabel SET ditDatofelt = CURRENT_TIMESTAMP - 10 DAYS
Avatar billede kjulius Novice
12. september 2005 - 11:49 #8
Jeg er ikke fortrolig med DB2 7.2 som du bruger (arbejder med DB2 UDB/400 på en iSeries platform), så det er muligt du skal eksperimentere lidt med funktionsnavne, da DB2s funktionalitet også har udviklet sig over tid:

CURDATE() -> CURRENT_DATE -> CURRENT DATE

CURRENT_TIMESTAMP -> CURRENT TIMESTAMP
Avatar billede kristianp Nybegynder
12. september 2005 - 11:51 #9
Dette virker :
CURRENT TIMESTAMP - 10 DAYS
Kan ikke bruge
CURRENT_TIMESTAMP - 10 DAYS

Hvis jeg så ændre feltet til typen date skal jeg vel bare kunne bruge

CURRENT DATE - 10 DAYS

Arne v : hvis jeg bruger CURRENT TIME får jeg :

------------------------------------------------------------
You can only copy this text if you are licensed for the Extended Edition of AQT------------------------------------------------------------
42816(-182)[IBM][CLI Driver][DB2/NT] SQL0182N  An expression with a datetime value or a labeled duration is not valid.  SQLSTATE=42816
(0.00 secs)
Avatar billede kjulius Novice
12. september 2005 - 11:57 #10
Ja, felttypen skal passe til den værdi man tildeler. Man kan dog bruge en CAST funktion til at ændre typen, så SET ditTimestampfelt = CAST(CURRENT DATE - 10 DAYS AS TIMESTAMP) burde også virke. Så får du bare en tildeling med en timedel på 00.00.00.0000.
Avatar billede kjulius Novice
12. september 2005 - 12:13 #11
For at være helt klar i mælet, så kan du ganske rigtigt bruge

SET ditDatofelt = CURRENT DATE - 10 DAYS

hvis du ændrer dit databasefelt fra type TIMESTAMP til type DATE.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester