If you like this site and you like coffee, why not buy me one. Because I love it

Click to buy coffe
avatar
Untitled

Guest 49 16th Nov, 2022

MARKUP 2.80 KB
                                           
                         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;
                      
                                       
To share this paste please copy this url and send to your friends
RAW Paste Data
Recent Pastes
Ta strona używa plików cookie w celu usprawnienia i ułatwienia dostępu do serwisu oraz prowadzenia danych statystycznych. Dalsze korzystanie z tej witryny oznacza akceptację tego stanu rzeczy.
Wykorzystywanie plików Cookie
Jak wyłączyć cookies?
ROZUMIEM