Avatar billede blach Nybegynder
06. december 2005 - 14:58 Der er 30 kommentarer og
1 løsning

Minus 1 dag

Jeg har en DATETIME gemt - denne vil jeg gerne have trukket en dag fra og udskrive - kan man gøre dette i en SELECT?
Eller skal det gøres med PHP?
Avatar billede erikjacobsen Ekspert
06. december 2005 - 15:07 #1
Du kan gøre det begge steder. I mysql kan du bruge subdate
http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html
Avatar billede blach Nybegynder
06. december 2005 - 20:04 #2
Okay sejt.. Vil du vise mig et eksempel i SQL hvor jeg trækker 1 dag fra?
Avatar billede blach Nybegynder
06. december 2005 - 20:08 #3
Dvs. jeg bare kan skrive:
SELECT SUBDATE('$dato', 1) AS $dato_minus_en ..

?

Og så finder den selv ud af om der er 29, 30 osv. dage i en måned?
Avatar billede blach Nybegynder
06. december 2005 - 20:08 #4
SELECT SUBDATE('dato_felt', 1) AS $dato_minus_en ..
Avatar billede erikjacobsen Ekspert
06. december 2005 - 20:10 #5
Nej, du kan ikke bare skrive 1 - er det en time, en dag eller en måned eller ...
Der er faktisk eksempler på siden jeg skrev før. Prøv noget i retning af

SELECT SUBDATE(dato_felt, INTERVAL 1 DAY) AS dato_minus_en ..
Avatar billede blach Nybegynder
06. december 2005 - 20:19 #6
Okay.. Men tager den selv hensyn til det omkring antal dage i en måned?
Avatar billede erikjacobsen Ekspert
06. december 2005 - 20:29 #7
Den 31. marts minus en måned er en hård nød ... :) Men minus een dag er altid som du forventer.
Avatar billede blach Nybegynder
06. december 2005 - 20:38 #8
Det ser ud til at virke fint - men får det udskrevet som engelsk dato!

Plejer at kunne gøre således:

      echo date("d/m-Y",$row4[ankomst_dato]);

Hvorfor virker dette ikke? (den udskriver 1/01-1970)
Avatar billede blach Nybegynder
06. december 2005 - 20:40 #9
Måske man kan putte DATEFORMAT udenpå igen? (i SELECT)
Avatar billede erikjacobsen Ekspert
06. december 2005 - 20:41 #10
Det er jo ikke et unix-timestamp. Men ja, du kan bruge DATEFORMAT i sql-sætningen
Avatar billede blach Nybegynder
06. december 2005 - 20:42 #11
Hvordan gør jeg det? Dette virker nemlig ikke:

SELECT SUBDATE(ankomst_dato, INTERVAL 1 DAY) AS DATE_FORMAT(ankomst_dato, '%d/%m-%Y') AS ankomst_dato
Avatar billede erikjacobsen Ekspert
06. december 2005 - 20:44 #12
SELECT DATE_FORMAT(SUBDATE(ankomst_dato, INTE.....
Avatar billede blach Nybegynder
06. december 2005 - 20:46 #13
Yup.. tak :)
Avatar billede blach Nybegynder
06. december 2005 - 21:02 #14
Okay lige et tillægsspørgsmål:

Kan man lave en SELECT hvor man tjekker efter, om ankomst_dato ligger før i dag (now()) minus 1 dag og før kl. 12 ?

Altså ankomst_dato må ikke passere dagen før dagsdato kl. 12.00.

Nogen lignende:

SELECT id WHERE ankomst_dato < now() minus 1 dag og klokken tolv ?
Avatar billede erikjacobsen Ekspert
06. december 2005 - 21:03 #15
Ja. Læs om datofunktionerne på linket ovenfor.
Avatar billede blach Nybegynder
06. december 2005 - 21:05 #16
Hehe.. jamen jeg synes det er lidt svært at forstå!
Avatar billede blach Nybegynder
06. december 2005 - 21:16 #17
Hvad så hvis jeg laver en SELECT med:
SELECT ADDDATE(ankomst_dato, INTERVAL 1 DAY) AS ankomst_dato

Hvordan tjekker jeg så om den er før kl. 12 ?


if(tid_nu > $row[ankomst_dato] kl 12.00)
{
Så er den efter dagen før kl. 12.
}
Avatar billede blach Nybegynder
06. december 2005 - 23:14 #18
erikjacobsen --> Kommer du ikke med et svar + hint ? :D
Avatar billede erikjacobsen Ekspert
06. december 2005 - 23:16 #19
Nej, jeg samler slet ikke på point.

Og et hint eller løsning .... ? Jo, der skal skrives en del, hvis det skal være i Mysql.
Du skal trække en dag fra, som du har gjort. Så skal der der findes DAY, MONTH, YEAR, og laves en ny dato/tid med kl. 12.00.  Måske det var nemmere, og kortere i PHP.
Avatar billede blach Nybegynder
06. december 2005 - 23:29 #20
Yup.. også det jeg lave op til 06/12-2005 21:16:15


Men hvordan ? :)

Du skal have mange tak for hjælpen, med eller uden point...
Avatar billede blach Nybegynder
09. december 2005 - 14:10 #21
erikjacobsen.. Kommer du ikke med lidt hjælp?? :)
Avatar billede erikjacobsen Ekspert
09. december 2005 - 15:33 #22
Nåh, jeg troede du have styr på det ;)  Du kan lege lidt videre med det her (ude af sammenhæng med tabel):

set @a= ADDDATE(now(), INTERVAL 1 DAY) ;
select CONCAT(YEAR(@a),'-',MONTH(@a),'-',DAY(@a),' 12:00:00')

Det giver dig "i morgen kl. 12:00:00"
Avatar billede blach Nybegynder
09. december 2005 - 16:19 #23
Okay jeg prøvede sådan:

//Dette giver "igår kl. 12:00:00" (for så kan jeg sammenligne og se om den er større eller mindre datoen i tabellen)
set @a= ADDDATE(now(), INTERVAL 1 DAY) ;
select SUBDATE(YEAR(@a),'-',MONTH(@a),'-',DAY(@a),' 12:00:00');

Men den giver følgende fejl:
Parse error: syntax error, unexpected '@' in ... (første linje)
Avatar billede erikjacobsen Ekspert
09. december 2005 - 16:59 #24
Din mysql-version?  Men prøv ellers bare med feltnavnet fra et datetime-felt i din tabel.
Avatar billede blach Nybegynder
09. december 2005 - 18:20 #25
MySQL ver: 4.1.10

Men er det meningen at det skal sættes ind i en SQL streng?

Kunne vi ikke prøve at lave det i PHP bare?
Avatar billede erikjacobsen Ekspert
09. december 2005 - 18:43 #26
Nå ja, det er SQL. Det ser da ikke så slemt ud, som jeg tænkte fordelen.
Avatar billede blach Nybegynder
09. december 2005 - 22:35 #27
Hmm.. kan du ikke komme med noget mere kode så? Kan ikke helt se hvordan det set @a skal ind i en sql sætning?
Men så skal jeg vel tage datoen nu, trække 1 dag tilbage og se kl 12.00.. Den dato skal være større end den dato som er gemt i databasen, ellers er værdien bare 0 eller noget!
Avatar billede erikjacobsen Ekspert
09. december 2005 - 22:58 #28
Du skal ikke bruge @a, du skal bruge et feltnavn.
Avatar billede blach Nybegynder
10. december 2005 - 00:18 #29
Jeg er ret blank på den der... Kan du ikke komme med en konkret SQL streng?
Avatar billede blach Nybegynder
11. december 2005 - 19:33 #30
Jeg lukker...
Avatar billede erikjacobsen Ekspert
11. december 2005 - 20:51 #31
Ok, men vi kan vel gøre den færdig hvis du er interesseret.
Kan du ikke give et par eksempler på hvad du mener med "Altså ankomst_dato må ikke passere dagen før dagsdato kl. 12.00" - altså nogle der skal med, andre der ikke skal.
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