---
title: "hämta ut där ålder < 18"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/122203-hämta-ut-där-ålder-18"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "ConnyFox"
published: "2005-02-11T05:38:14.000Z"
updated: "2005-02-12T02:10:25.000Z"
replies: 35
views: 913
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/122203-hämta-ut-där-ålder-18"
---

# hämta ut där ålder < 18

_Sida 1 av 2._

## #1 — ConnyFox, 2005-02-11T05:38Z

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..

Permalänk: https://www.webforum.nu/p/122203

## #2 — @nders, 2005-02-11T06:03Z

För att kunna använda datumfunktioner måste värdet vara av typen datum. Alltså skulle jag lagra födelsedatumet i ett fält av datumtyp.

Vilken funktion man ska använda beror nog lite på vilken databas (och version) man använder.

Permalänk: https://www.webforum.nu/p/1550238

## #3 — ConnyFox, 2005-02-11T07:30Z

Använder mysql och det är tyvärr inte möjligt att lagra det i datumfält då 4 sista siffrorna skall vara med.

Borde ju gå o göra om 840206 till 1984-02-06 och sedan jämföra kanske.. hur vet jag inte :D

Permalänk: https://www.webforum.nu/p/1550248

## #4 — @nders, 2005-02-11T08:01Z

Jag hade lagrat födelsedatum i ett eget fält, och de fyra sista i ett annat fält, om man nu prompt måste ha med dem.

Du kan ju sedan prova att söka lite här i forumet, för det här med ålder och födelsedagar och sådant diskuteras med jämna mellanrum. Sedan kan man ju alltid rekommendera att du kollar upp datumfunktionerna på www.mysql.com. :)

mvh

Permalänk: https://www.webforum.nu/p/1550254

## #5 — ConnyFox, 2005-02-11T08:09Z

Mjo det e tyvärr för sent för det nu då det redan är på detta vis.
Så om någon vet hur man kan fixa det så vore jag tacksam.

Permalänk: https://www.webforum.nu/p/1550256

## #6 — aasah, 2005-02-11T08:15Z

I så fall får du hämta ut värdet som en sträng och sedan plocka ut de två första siffrorna ur den mha substring. Omvandla till heltal, och räkna i ditt applikationsprogram. Alternativet är väl att ändra i tabellen så att det blir som @nders föreslog.

Permalänk: https://www.webforum.nu/p/1550257

## #7 — ConnyFox, 2005-02-11T08:39Z

men det borde väll ganska enkelt gå att göra om 840206 till 1984-02-06 eller?

Sen borde det väll bara vara o köra någon datediff eller dateadd eller nått, vet inte vilket man använder.

@nders förslag är inget alternativ

Permalänk: https://www.webforum.nu/p/1550269

## #8 — toha, 2005-02-11T08:41Z

Du skulle ju kunna diffa datumen med GETDATE() och kolla om det är efter 1918-01-01. Kanske inte så snyggt men...

```
declare @birthdate datetime
SET 	@birthdate = 	convert(datetime, SUBSTRING('910822',1,6), 12)	-- 12 = ISO date (yymmdd)

select GETDATE()-@birthdate

IF (GETDATE()-@birthdate >= '1918-01-01')
	PRINT 'Over 18.'
ELSE
	PRINT 'Under 18'
```

Permalänk: https://www.webforum.nu/p/1550272

## #9 — aasah, 2005-02-11T08:42Z

Jag TROR inte att det går inom SQL. Alltså måste det fixas i applikationsprogrammet under alla omständigheter.

toha - det är ju ingen datetime??

Permalänk: https://www.webforum.nu/p/1550273

## #10 — toha, 2005-02-11T08:50Z

Ah, my bad aasah. :) Var lite lat av mig där. Ska självklart göra 1918 till en datetime innan man jämför.

Permalänk: https://www.webforum.nu/p/1550278

## #11 — LarsG, 2005-02-11T09:25Z

Du måste lagra födelseåret med 4 siffror om det skall fungera riktigt.

```
select extract(year from current_date) -
cast(substring(birthDate from 1 for 4) as integer)
- case when 
cast(substring(birthdate from 5 for 2) as integer) >
extract(month from current_date)
or (cast(substring(birthdate from 5 for 2) as integer) =
extract(month from current_date)
and (cast(substring(birthdate from 7 for 2) as integer) >
extract(day from current_date) then 1 else 0 end
from t
```

Permalänk: https://www.webforum.nu/p/1550292

## #12 — ConnyFox, 2005-02-11T09:31Z

ok men som jag redan sagt så är det för sent för att ändra, det är i formatet 840206-xxxx, det kanske är osmidigt men så är det..

måste ju gå på NÅTT viss o slänga till 19 i början och ett par - mitt i o sedan jämföra eller?

Permalänk: https://www.webforum.nu/p/1550298

## #13 — m_soderlund, 2005-02-11T09:46Z

Varför är det för sent att ändra på? Mig veterligen går det relativt enkelt att skapa kolumner i en tabell och sedan sätta in rätt data i de kolumnerna. Skapa en kolumn:

```
alter table din_tabell add fyra_siffror int
```

Sen kör du LarsG:s SQL-fråga om jag förstått det hela rätt.

Allmän fråga: Om jag har ett värde i kolumnen namn och vill plocka ut de sex första bokstäverna i värdet, skriver jag då så här:

```
SELECT substring(namn,1,6) FROM mintabell
```

eller skriver jag

```
SELECT namn,substring(namn,1,6) FROM mintabell
```

?

Permalänk: https://www.webforum.nu/p/1550302

## #14 — @nders, 2005-02-11T09:51Z

martin, ang din allmänna fråga; det beror på om du vill ha ut fältet namn i sin helhet, utöver de första sex bokstäverna.

Permalänk: https://www.webforum.nu/p/1550306

## #15 — m_soderlund, 2005-02-11T09:51Z

> **@nders skrev:**
>
> martin, ang din allmänna fråga; det beror på om du vill ha ut fältet namn i sin helhet, utöver de första sex bokstäverna.

Då så. Då hänger jag med. Tack. Over n out! :bire

Permalänk: https://www.webforum.nu/p/1550307

## #16 — ConnyFox, 2005-02-11T10:04Z

M_Soderlund : För att sidan och dess databas redan har varit igång i flera månader och det skulle bli en gimla massa jobb att ändra databasuppbyggnaden och scripten i efterhand.. Dessutom skulle den gamla informationen inte stämma överänns med den nya..

Permalänk: https://www.webforum.nu/p/1550311

## #17 — ConnyFox, 2005-02-11T11:21Z

oook detta funkar inte, vad gör jag fel? :D

```
function datechange(sPersID)
datechange = DateSerial(Left(sPersId, 2), Mid(sPersId, 3, 2), Mid(sPersId, 5, 2))
end function

Mysql = "Select email from kunder where DateDiff('yyyy', datechange(personnr), Date()) < 18"
set RS = connect.execute(mysql)
```

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
\[MySQL\]\[ODBC 3.51 Driver\]\[mysqld-4.1.5-gamma-nt\]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(personnr), Date()) \< 18' at line 1
/pocketbike/minis.se/admin_email.asp, line 18

Permalänk: https://www.webforum.nu/p/1550348

## #18 — ConnyFox, 2005-02-11T11:38Z

Personnr är ett databasfält..

Permalänk: https://www.webforum.nu/p/1550351

## #19 — @nders, 2005-02-11T11:43Z

Du kan inte blanda ASP och SQL på det sättet.

Tillvägagångssättet får väl vara så här:
\*) Mha ASP skapar du en SQL-fråga (en färdig sträng)
\*) Den färdiga SQL-frågan exekveras.

För att använda din asp-funktion måste du alltså först hämta ut allt data, och sedan göra jämförelsen i ASP.

Permalänk: https://www.webforum.nu/p/1550354

## #20 — ConnyFox, 2005-02-11T11:46Z

damnit..

Permalänk: https://www.webforum.nu/p/1550355

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/122203-hämta-ut-där-ålder-18  
Nästa sida: https://www.webforum.nu/amne/databaser-sql/122203-hämta-ut-där-ålder-18/page2.md
