Kamil Tandek

Kamil Tandek Specjalista SEO/SEM
- absolwent Biznesu
Elektronicznego

Temat: zapytanie pesel starsi oraz mlodsi niz - prosba o pomoc

Mam tabele z imieniem nazwiskiem i peselami

zadanie mam znalesc ludzi ktorzy urodzili sie przed 1950 i urodzili sie po 1998

Probowalem zapytania


select * from dane where pesel < like '50%' or pesel > like '98%'


zapytanie nie chce smigac

Druga kwestia ze jak ktos sie urodzil po 2000 to bedzie mial 00 na poczatku? co burzy troche logike

Może jakieś inne metody ?

Np wyciągnięcia aktualnego wieku i wtedy

Z góry dzięki za pomoc
Łukasz Cychner

Łukasz Cychner Architekt Systemów

Temat: zapytanie pesel starsi oraz mlodsi niz - prosba o pomoc

Możesz sobie napisać prostą funkcje zwracająca datę urodzenia na podstawie pesela.

Przykład:


DECLARE @Pesel nvarchar(11)
DECLARE @Data smalldatetime;
DECLARE @Rok char(2);
DECLARE @Miesiac nvarchar(2);
DECLARE @Tmp smallint;

SET @Pesel = 'tutaj 11 znakow pesela'


SET @Tmp = SUBSTRING(@Pesel, 3, 2)
SELECT @Rok =
CASE
WHEN @Tmp < 20 THEN '19'
WHEN @Tmp < 40 THEN '20'
WHEN @Tmp < 60 THEN '21'
WHEN @Tmp < 80 THEN '22'
END
SELECT @Miesiac =
CASE
WHEN @Tmp < 20 THEN CONVERT(nvarchar, @Tmp)
WHEN @Tmp < 40 THEN CONVERT(nvarchar, @Tmp - 20)
WHEN @Tmp < 60 THEN CONVERT(nvarchar, @Tmp - 40)
WHEN @Tmp < 80 THEN CONVERT(nvarchar, @Tmp - 60)
END
IF LEN(@Miesiac) < 2
SET @Miesiac = '0' + @Miesiac

SET @Data = CONVERT(smalldatetime,@Rok + SUBSTRING(@Pesel, 1, 2) +
@Miesiac + SUBSTRING(@Pesel, 5, 2), 112)

SELECT @Data


Jak już masz daty to prosto zrobić warunek na przedział.Łukasz Cychner edytował(a) ten post dnia 28.02.11 o godzinie 19:30
Paweł Pasztaleniec

Paweł Pasztaleniec Lead Consultant -
CGI

Temat: zapytanie pesel starsi oraz mlodsi niz - prosba o pomoc

Łukasz Cychner:


SET @Data = CONVERT(smalldatetime, + SUBSTRING(@Pesel, 1, 2) +
@Miesiac + SUBSTRING(@Pesel, 5, 2), 112)

SELECT @Data

"@Rok" gdzieś wcięło w powyższym fragmencie
Łukasz Cychner

Łukasz Cychner Architekt Systemów

Temat: zapytanie pesel starsi oraz mlodsi niz - prosba o pomoc


"@Rok" gdzieś wcięło w powyższym fragmencie

dzięki, już poprawiłem
Kamil Tandek

Kamil Tandek Specjalista SEO/SEM
- absolwent Biznesu
Elektronicznego

Temat: zapytanie pesel starsi oraz mlodsi niz - prosba o pomoc

dzieki

a czy da się przez przekształcenia zbudować operator logiczny z like
załóżmy dla uproszczenia że interesują mnie pesele starsze niż '50%'?
Łukasz Cychner

Łukasz Cychner Architekt Systemów

Temat: zapytanie pesel starsi oraz mlodsi niz - prosba o pomoc

Kamil Tandek:
dzieki

a czy da się przez przekształcenia zbudować operator logiczny z like
załóżmy dla uproszczenia że interesują mnie pesele starsze niż '50%'?

możesz np dać


where pesel like '[5-9]%'

Temat: zapytanie pesel starsi oraz mlodsi niz - prosba o pomoc

Kamil Tandek:
Mam tabele z imieniem nazwiskiem i peselami

zadanie mam znalesc ludzi ktorzy urodzili sie przed 1950 i urodzili sie po 1998


where left(pesel,2) not between 50 and 98
[edit] aktualne przynajmniej do 2049 [/edit]Leszek Gniadkowski edytował(a) ten post dnia 01.03.11 o godzinie 13:11
Bartosz Ślepowronski

Bartosz Ślepowronski Problem? Jaki
problem?

Temat: zapytanie pesel starsi oraz mlodsi niz - prosba o pomoc

Kamil Tandek:
Może jakieś inne metody ?

Nie trzeba się bawić w procedury, można np tak:

SELECT * FROM (SELECT left(pesel,2) rok FROM Pesel) TabelaRok
WHERE (CASE WHEN rok < 20 THEN rok +100 else rok END) < 50
OR (CASE WHEN rok < 20 THEN rok +100 else rok END) > 98


Albo tak:

WITH CTE_Pesel
AS
(
SELECT left(pesel,2) rok FROM Pesel
)
SELECT * FROM CTE_Pesel
WHERE (CASE WHEN rok < 20 THEN rok +100 else rok END) < 50
OR (CASE WHEN rok < 20 THEN rok +100 else rok END) > 98


CTE tu nie ma specjalnie sensu, ale ładnie wygląda ;) Zresztą ładniej nawet wygląda taki zagnieżdzony w sobie, bez śmieci po lewej stronie WHERE:

WITH CTE_Pesel
AS
(
SELECT left(pesel,2) rok FROM Pesel
)
,CTE_Pesel2 AS
(
SELECT (CASE WHEN rok < 20 THEN rok +100 else rok END) Rok2 FROM CTE_Pesel
)
SELECT * FROM CTE_Pesel2
WHERE Rok2 < 50 or Rok2 >98
Bartosz Ślepowronski edytował(a) ten post dnia 02.03.11 o godzinie 15:37

Następna dyskusja:

sql developer -pomoc jak us...




Wyślij zaproszenie do