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.
Databaser & SQLur Databashanterare & SQL
35 svar · 866 visningar · startad 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..
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.
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
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
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.
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.
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
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'
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??
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.
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
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?
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
?
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.
@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
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..
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
Personnr är ett databasfält..
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.
damnit..