webForumDet fria alternativet

Hitta större datum

Databaser & SQL

20 svar · 1 144 visningar · startad av Mr T

Medlem sedan maj 20071 061 inlägg
Frågan#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...)

Medlem sedan feb. 20011 198 inlägg
#2

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

Medlem sedan maj 20071 061 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.)

Medlem sedan dec. 2004736 inlägg
#4

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

Medlem sedan maj 20071 061 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.)

Medlem sedan juni 200032 967 inlägg
#6

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

Medlem sedan maj 20071 061 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. :)

Medlem sedan dec. 20025 483 inlägg
#8

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

Medlem sedan juni 200032 967 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.

Medlem sedan maj 20071 061 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.

Medlem sedan dec. 20025 483 inlägg
Medlem sedan maj 20071 061 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.

Medlem sedan maj 20071 061 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 ?

Medlem sedan mars 2007845 inlägg
#14

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

Medlem sedan maj 20071 061 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 !

Medlem sedan mars 2007845 inlägg
#16

hmm

WHERE (MONTH(day_date) = 4 AND DAY(day_date) >= 24) OR MONTH(day_date) > 4
Medlem sedan maj 20071 061 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 ) )

Medlem sedan maj 20071 061 inlägg
#18

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

Medlem sedan mars 2007845 inlägg
#19

Hah, jag var en minut snabbare. :p

Medlem sedan maj 20071 061 inlägg
#20

LOL !

263 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)