Lab 3 - Klimek Bazy Danych || Walidacja PESEL nie jest pełna -- 1. Wyznaczyć ilość liczb pięciocyfrowych parzystych zawierających cyfrę 5 select count(n) from dbo.Nums where n like '%5%' AND n % 2 = 0 AND n > 9999 AND n < 100000; -- Odpowiedź : 15840 -- 2. Do tabeli tymczasowej #Osoby z kolumnami Id, Imię, Nazwisko, Data urodzenia, Płeć, Pesel (z odpowiednimi typami danych) wpisać przykładowe dane (z poprawnymi i niepoprawnymi danymi) -- Dla wszystkich danych w tabeli Osoby zwalidować czy to jest poprawny PESEL (jak najwięcej walidacji): -- sprawdzić długość napisu, czy zawiera same cyfry, czy dane z daty urodzenia i płci się zgadzają, zweryfikować sumę kontrolną. -- Wypisać informacje w postaci Imię: xx, Nazwisko: xx, Poprawny/Niepoprawny PESEL: xx, Informacja o błędzie przy walidacji PESEL create table #Osoby ( Id int primary key identity(1,1), Imie varchar(50) not null, Nazwisko varchar(50) not null, Data_urodzenia date, Plec varchar(1), Pesel varchar(11) ); --poprawny PESEL tylko pierwszy --insert into #Osoby values ('Stanislaw','Daniluk','2000-10-10','M','00301004156'); --insert into #Osoby values ('Emilia','Daniluk','1999-01-01','M','00301004156'); --insert into #Osoby values ('Jarek','Daniluk','1998-02-02','M','00301004156'); --insert into #Osoby values ('Aneta','Daniluk','1997-10-10','M','00301004156'); --insert into #Osoby values ('Franciszka','Daniluk','1996-10-10','M','00301004156'); --insert into #Osoby values ('Dawid','Daniluk','1965-10-10','M','00301004156'); --insert into #Osoby values ('Marcin','Daniluk','1964-10-10','M','00301004156'); --insert into #Osoby values ('Michał','Daniluk','1969-10-10','M','00301004156'); --insert into #Osoby values ('Mateusz','Daniluk','1991-10-10','M','00301004156'); --insert into #Osoby values ('Ania','Daniluk','1991-10-10','M','00301004156'); --insert into #Osoby values ('Ania','Daniluk','1991-10-10','M','003d10s4156'); --insert into #Osoby values ('Ania','Daniluk','1991-10-10','M','qweqe'); --insert into #Osoby values ('Ania','Daniluk','1991-10-10','M','qweqw'); --insert into #Osoby values ('Ania','Daniluk','1991-10-10','M','bfhfnyn') CREATE FUNCTION dbo.IsValidPesel(@pesel nchar(11)) RETURNS bit AS BEGIN IF ISNUMERIC(@pesel) = 0 RETURN 0 IF LEN(@pesel) != 11 RETURN 0 DECLARE @weights AS TABLE ( Position tinyint IDENTITY(1,1) NOT NULL, Weight tinyint NOT NULL ) INSERT INTO @weights VALUES (1), (3), (7), (9), (1), (3), (7), (9), (1), (3), (1) IF (SELECT SUM(CONVERT(TINYINT, SUBSTRING(@pesel, Position, 1)) * Weight) % 10 FROM @weights ) = 0 RETURN 1 RETURN 0 END select * from #Osoby; select Imie, Nazwisko, Pesel from #Osoby where dbo.IsValidPesel(Pesel) = 1;