Przedstawiam dalszy ciąg testów i to, co z tego wynikło ![wink](https://forum.postgresql.org.pl/img/smilies/wink.png)
Sprawdzono, czy jest potrzeba zajmowania się młodszymi rocznikami - nie ma od 2000 więc są 19...:
SELECT * FROM osoba WHERE data_ur >= 2000-01-01 LIMIT 5;
Skoro nie ma roczników młodszych jak 2000 to wykorzystam tylko jeden warunek z rozpatrywanego SELECT i w zmienionym ustawieniu formatu daty czyli od roku.
SELECT ('19'||substr(pesel,1,2)||'-'||substr(pesel,3,2) ||'-'|| substr(pesel,5, 2))::date FROM osoba LIMIT 5;
wyszukało ok., a teraz dla pustych data_ur, które to chcę uzupełnić i w celu porównania z wypisanym peselem i datą ur.:
SELECT pesel,data_ur, ('19'||substr(pesel,1,2)||'-'||substr(pesel,3,2) ||'-'|| substr(pesel,5, 2))::date FROM osoba WHERE data_ur IS NULL LIMIT 5;
wyszukało z pustymi polami data_ur ok.
To teraz przerabiam na UPDATE:
UPDATE osoba SET data_ur = ('19'||substr(pesel,1,2)||'-'||substr(pesel,3,2) ||'-'|| substr(pesel,5, 2))::date WHERE data_ur IS NULL;
Ale niestety nie mogę podać teraz efektu, bo wychodzą niezgodności przez które, to jest niemożliwe.
W pierwszej kolejności należałoby wyłowić i poprawić pomyłki w peselu :
ERROR: date/time field value out of range: "1945-22-90"
HINT: Perhaps you need a different "datestyle" setting.
a to byłby wtedy taki początek PESEL: 452290
No ale jak to zrobić za jednym zamachem? Teraz wyszukuję SELECTem początek takiego pesel (LIKE '452290%') i zaraz UPDATE osoba SET pesel = '451202....' poprawiam , znowu powtarzam UPDATE osoba SET data_ur ... i poprawiam blokujący błąd... ale ile to potrwa?
Nie wiem jak policzyć ile jest takich przypadków? Więc od jutra będę wyszukiwać jakoś bardziej ogólnie SELECT ... ale jeszcze nie wiem jak, może np. pesel LIKE ' ______ %' czyli jakiekolwiek anomalia przyjda mi do głowy ![smile](https://forum.postgresql.org.pl/img/smilies/smile.png)
Ostatnio edytowany przez r_k2 (2009-02-25 15:59:31)