webForumDet fria alternativet

Hitta större datum

20 svar · 1 144 visningar · startad av Mr T

Mr TMedlem sedan maj 20071 147 inlägg
#1

Ska hitta födelsedagar vars månad och dag är lika med eller större än dagens datum (så jag vet vilka av mina vänner jag kan kräva tårta av. Redan uppätene tårtor vill jag inte ha!) ;)

Om vi tar dagens datum (2009-03-07)

SELECT * FROM databas WHERE day_date >= '%-03-07'

Av frågan ovan får jag även ut tidigare födelsedagar :( (gammal tårta vill väll ingen ha!!!)

Vad gör jag för fel? (trött, blind och *gäsp* Zzzzzz...)

yohpopsMedlem sedan feb. 20011 102 inlägg
#2

Lägg till "and day_date>=dagens datum".

Mr TMedlem sedan maj 20071 147 inlägg
#3

Jag kan inte använda dagens datum, detta då året är personernas födelse, år.

Ex.
1954-01-13 - Bertil
1984-06-10 - Lisa

Om jag nu ska göra en sökning på vilken av dessa personer som har sina födelsedagar kvar att fira detta året, vill jag ju bara få träffar på Lisas datum. (Sedan använder jag hennes årtal minus året och får fram åldern.)

LedelMedlem sedan dec. 2004735 inlägg
#4

MONTH(day_date) >= month_today AND DAY(day_date) >= day_today eller något liknande?

Mr TMedlem sedan maj 20071 147 inlägg
#5

(Tack Ledel, du fick mig på rätt spår, även om lösningen blev annorlunda.)

Tabellen

+----------+------------+
| name     | day_date   |
+----------+------------+
| Bertil   | 1954-01-13 |
| Lisa     | 1984-06-10 |
+----------+------------+
 SELECT * FROM databas WHERE RIGHT(day_date,5)>='03-07'

(Med RIGHT kommandot plockar jag ut 5 tecken från höger, alltså månad och dag.)

@ndersMedlem sedan juni 200026 914 inlägg
#6

Man ska inte använda strängfunktioner för att kolla delar av datum. Man ska använda datumfunktioner.

Mr TMedlem sedan maj 20071 147 inlägg
#7

Du får gärna komma upp med en bättre lösning. Denna funkar och därför kör jag med den tills jag får en bättre. :)

Peter SMedlem sedan dec. 20025 484 inlägg
#8

Se Ledels förslag: jämför månad och dag för day_date mot dagens diton :)

@ndersMedlem sedan juni 200026 914 inlägg
#9

Att använda strängfunktioner kanske funkar - ett tag, eller på en viss server. Nästa gång du kör frågan kanske ett annat datumformat ges, till exempel 03/08/2009. Då får du /2009 tillbaka. Det är fel.

Mr TMedlem sedan maj 20071 147 inlägg
#10

Peter S: Letade efter kommandot DAY på https://www.mysql.org men fann inget där. Ser först nu hur genial Ledels förslag är.
När jag letade på https://www.mysql.org efter DAY gav dom förslag på en liknade funktion som jag gjorde ovan, därför blev det så :-/
Men helt klart ska jag ge DAY kommandot en test.

Peter SMedlem sedan dec. 20025 484 inlägg
Mr TMedlem sedan maj 20071 147 inlägg
#12

Jag ger mig. Förlåt för min dumhet och okunskap och slarv och .... Det funkade med Day() och Month(), och som påpekat är det ju säkrare.
Får ta och se om jag en dag kommer överns med sidan mysql.com så jag också kan hitta dom fina/bra/rätta kommandona, detta så jag slipper störa er :)

Stort tack för all hjälp.

Mr TMedlem sedan maj 20071 147 inlägg
#13

Har fått tid över (och error som jag måste fixa).

Använder jag "RIGHT(day_date,5)>='04-24'" får jag dessa 10 första datum :
04-24 - Gabriella
04-26 - Ivo
04-29 - Barbro
04-29 - Berth
04-29 - Isabell
05-05 - Henrik
05-10 - Torgny
06-05 - Inga-Lill
06-06 - Klaudia
06-10 - Miranda
...

Använder jag "MONTH(day_date)>=4 AND DAY(day_date)>=24" får jag följande 8 datum (">='4'" ger ingen skillnad) :
04-24 - Gabriella
04-26 - Ivo
04-29 - Isabell
04-29 - Barbro
04-29 - Berth
06-27 - Veronica
09-25 - Stanko
12-28 - Kreso

Var tar ex "Henrik" vägen i den undre sökningen ?

drewMedlem sedan mars 2007748 inlägg
#14

05-05 - Henrik kan ju inte hittas med DAY(day_date) >= 24

Mr TMedlem sedan maj 20071 147 inlägg
#15

Natrurligtvis !

Men hur gör jag då för att få en bra sökning ? Frågan ska altså vara samma månad och framåt, fast i månader framåt ska det vara dag datum bakåt.

Tacksam för hjälp !

drewMedlem sedan mars 2007748 inlägg
#16

hmm

WHERE (MONTH(day_date) = 4 AND DAY(day_date) >= 24) OR MONTH(day_date) > 4
Mr TMedlem sedan maj 20071 147 inlägg
#17

Såhär blev det :

( ( MONTH(day_date)=4 AND DAY(day_date)>=24 ) OR ( MONTH(day_date)>=5 AND DAY(day_date)>=1 ) )

Mr TMedlem sedan maj 20071 147 inlägg
#18

Tack drew. Du har varit till mycket hjälp.

drewMedlem sedan mars 2007748 inlägg
#19

Hah, jag var en minut snabbare. :p

Mr TMedlem sedan maj 20071 147 inlägg
#20

LOL !

131 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
129 ms — hämta tråd, inlägg och bilagor (db)