webForumDet fria alternativet

hämta ut där ålder < 18

Databaser & SQL

35 svar · 866 visningar · startad av ConnyFox · sida 2 av 2

Frågan, av ConnyFox

har ett fält i min databas som innehåller person nummer t.ex 840206-xxxx det jag vill göra är att plocka ut alla där personen är \<18 år. antar det e datediff eller nått man får använda sig utav..

Läs frågan i sin helhet →
Medlem sedan aug. 20011 087 inlägg
#21

Men vf :D Kan ju inte hämta ut datan fösrt, behöver ju ha den där datediff saken för o hämta ut datan :D

Medlem sedan juni 200032 967 inlägg
#22

Japp, det är därför man ska göra rätt från början. Gör man inte det får man helt enkelt ändra. :)

Men det är väl inga problem att ändra så du lagrar året med fyra siffror, så du kan köra LarsGs kod? Det är ju bara en liten update, och du kan väl inte ha en miljon ställen att ändra på i asp-koden?

Medlem sedan aug. 20011 087 inlägg
#23

jo det e massa jobb, måste dessutom ha kvar personnr...
det man kanske skulle kunna göra om det går är att lägga till ett till fält som automatiskt fylls på med datum..

så om personnr innehåller 840206-xxxx så fylls fältet datum automatiskt på med 1984-02-06..

går det o fixa eller?

Medlem sedan mars 20034 471 inlägg
#24

Men, ConnyFox! Om du nu ändå har ett skript i ASP där värdena ska behandlas, varför inte plocka ut värdet '840206-xxxx' som det står i databasen, ta ut första två tecknen med substring (inte för att jag kan ASP, men den funktionen måste ju bara finnas). I pseudokod:
plocka ut '84' ur '840206-xxxx'
gör om '84' till 84
if (året < 10) året = 2000 + året
else året = 1900 + året
ålder = 2005 - året

Borde gå betydligt fortare om du inte vill ändra i din tabell.

Medlem sedan aug. 20011 087 inlägg
#25

eftersom jag inte vet vilket värde jag skall plocka ut. det e ju det jag tar reda på mad datediffen.

Kan jag inte kolla vilka värden som skall hämtas ut (dvs dom som är under 18år) så e det ju lite svårt att plocka ut dom för att ändra dom ellerhur.. ;D

Medlem sedan aug. 20011 087 inlägg
#26

glöm det föresten.. tänkte fel.. men tycker det låter för jobbigt..

Medlem sedan sep. 20026 425 inlägg
#27

Inte för att det hjälper nu, men en påminnare till nästa gång:

1. Gör om, gör rätt.
2. Gör rätt från början.

Gör tillräckligt mycket "research" på vad du måste göra för en viss framtidskompatibilitet innan du bygger din applikation. Speciellt om du i framtiden måste bygga ut/modifera applikationen (vilket du är tvungen till nu).

Medlem sedan aug. 20011 087 inlägg
#28

Ja men nu var det så att denna funktionen inte skulle finnas med från början och nu när den befintliga sidan går bra ville dom ha en del extrafunktioner. dvs inget jag kunde förespå i förväg.

kan ju inte tänka som så, dom kanske vill sälja börja sälja bilar nån gång i framtiden, nog bäst att jag gör så att alla får skriva in om dom har körkort ;D

Sen så utgick jag utifrån det dom sa dom ville ha med. kan inte gå o lägga till massa saker ifall ifall.

Medlem sedan dec. 19995 874 inlägg
#29

Rent spontant tycker jag att följande borde fungera.

SELECT 
    col1, col2
FROM 
    members
WHERE 
    DATE_SUB(CURDATE(), INTERVAL 18 YEAR) <= '19'+left(persnr,6)
Medlem sedan aug. 20011 087 inlägg
#30

Hmm får inget error men får inte ut nått heller.. :D

MySQL = "Select email from kunder where DATE_SUB(CURDATE(), INTERVAL 18 YEAR) <= '19'+left(personnr,6)"
Medlem sedan mars 20034 471 inlägg
#31

Brimbas förslag funkar avgjort inte för folk födda efter 1999.

ConnyFox skrev:

... Kan jag inte kolla vilka värden som skall hämtas ut (dvs dom som är under 18år) så e det ju lite svårt att plocka ut dom för att ändra dom ellerhur.. ;D

Plocka ut ID-värdena förutom personnummren, lagra ID:t för de rader där personen är mindre än 18 år i array eller dylikt.

Plocka ut rätt rader genom att jämföra dem med dessa ID-nr i en andra SQL-fråga.

Medlem sedan aug. 20011 087 inlägg
#32

Ja men nu funkade brimbas förslag faktiskt inte alls för mig, fick inte ut några poster alls..

Och assah.. hur skall jag kunna lagra raderna där personen är mindre än 18år när jag inte har en fungerade sql fråga som kollar just detta? :D

Detta verkar vara det jag får funka bäst och som fungerar på mysql 4.0..

Mysql = "Select email from kunder where (TO_DAYS(CURDATE()) - to_days('19'+left(personnr,6))) < 4770"

Medlem sedan mars 20034 471 inlägg
#33

ConnyFox skrev:

Ja men nu funkade brimbas förslag faktiskt inte alls för mig, fick inte ut några poster alls..

Min kommentar var avsedd för IFALL du och Brimba kan få det att funka.

forts skrev:

Och assah.. hur skall jag kunna lagra raderna där personen är mindre än 18år när jag inte har en fungerade sql fråga som kollar just detta? :D...

I pseudokod:

  1. SELECT ID, personnummer från tabell; kör
    För varje rad i resultatet (2-6):
  2. plocka ut två första tecknen, ex: '84' ur '840206-xxxx'
  3. gör om dessa till tal, ex: '84' till 84
  4. if (året < 10) året = 2000 + året
    else året = 1900 + året
  5. ålder = 2005 - året //väl grovt eg. håller ju inte rätt på var födelsedagen är
  6. If (ålder < 18) lagra ID:t någonstans i nån array.
    Tag arrayen och jämför:
  7. Skriv SQL-fråga som plockar ut rader med ID-nr:na i arrayen.

Om du inte vill skriva om databasen, så måste du ju lösa det på något annat mer eller mindre jobbigt sätt. Det är bara att välja vilket sura äpple du vill bita i... ;)

Medlem sedan dec. 19995 874 inlägg
#34

Hej igen!

ConnyFox, ditt exempel där du räknar dagar istället för år fungerar också naturligtvis lika bra, skillnaden var att jag räknade år.

Brimbas förslag funkar avgjort inte för folk födda efter 1999 skrev:

Det fungerar ju trots allt ända fram till 2018 och innan det får vi hoppas att ConnyFox har programmerat om sin applikation ;)

Medlem sedan mars 20034 471 inlägg
#35

Brimba skrev:

...

Brimbas förslag funkar avgjort inte för folk födda efter 1999 skrev:

Det fungerar ju trots allt ända fram till 2018 och innan det får vi hoppas att ConnyFox har programmerat om sin applikation ;)

Misstänker nåt knas i ditt citat... men du har naturligtvis rätt. Jag tänkte fel där...

Medlem sedan aug. 20011 087 inlägg
#36

japp det får fungera så tills vidare det e enda lösningen jag fått fungera som inte tvingar mig o gör aom databasen.

tack för all hjälp iaf.

268 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)