Геній і COBOL
І чому немає обговорення цього факапу?
Чому б не обговорити рівень фахівців, яким Ілон Маск доручив досліджувати базу даних з номерами страхування всіх американців?
На мою думку щоб просто написати коректний запит в систему, яку писали шістдесят років, використовуючи власні формати даних і яка містить мільярди полів дуже чутливих записів, потрібно кілька місяців роботи дуже досвідченої команди, яка обов’язково мала б включати фахівців з COBOL
Ось, що думає про цей випадок ChatGPT:
— У COBOL немає єдиної «дефолтної» дати, оскільки сама мова не має вбудованого типу DATE. Але в практиці програмування на COBOL часто використовуються такі значення як дефолтні (залежить від конкретної системи та стандартів компанії):
- 00000000 (PIC 9(8))
- 000000 (PIC 9(6))
- 000101 або 00000101 — іноді використовують 1 січня 1900 року як початкову точку.
2. Максимальна або «Магічна» дата
- 99999999 або 999999 — означає «найвіддаленіше майбутнє» або «не встановлено».
- 20991231 — іноді використовують як «максимальну» дату.
3. Юліанські дати
- 000001 (YYDDD) →
1-й день 1900 року (1 січня 1900). - 1900001 (YYYYDDD) → 1 січня 1900.
4. Дата «початку ери»
- 18000101 або 19000101 → іноді використовується як технічний мінімум.
Як це може спричинити помилку?
Якщо в COBOL-дефолтна дата — 000000 або 00000000, а SQL обробляє це як число, то:
- 00000000 може конвертуватися у
0000-00-00, що в SQL не є валідною датою. - У деяких системах 000000 може конвертуватися у 19000000, що SQL може округлити до
1900-01-01. - Деякі бази можуть інтерпретувати 000000 як
1800-01-01 (або навіть1753-01-01 у SQL Server, який не підтримує дати раніше 1753 року).
Тобто, якщо така дата використовується як «дата народження», система може «вирішити», що людині 150 або більше років.
— Я знайшов інформацію що нульова дата в COBOL May 20th, 1875
— Так, дата 20 травня 1875 року
SELECT DATEDIFF(YEAR, ’1875-05-20′, GETDATE()) AS Age;
У 2025 році вийде 150 років!
Це класичний випадок, коли дефолтна дата з COBOL потрапляє в SQL, а програміст не передбачив перевірки на коректність.
Ще є кілька тредів на редіті.
2 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарівМораль — можна бути брехуном і недоумком, але при цьому — багатою людиною, з сильним впливом. Тепер живіть із цим!
Геній не геній а за слабо ресурси=надра=землю віджав.