unknown 3 päivää sitten
vanhempi
commit
64787b7da5

+ 37 - 8
.obsidian/workspace.json

@@ -13,15 +13,44 @@
             "state": {
               "type": "markdown",
               "state": {
-                "file": "hardcore web development/11. SQL/Типы данных.md",
+                "file": "c/c common.md",
                 "mode": "source",
                 "source": false
               },
               "icon": "lucide-file",
-              "title": "Типы данных"
+              "title": "c common"
+            }
+          },
+          {
+            "id": "3e9f239e738f776c",
+            "type": "leaf",
+            "state": {
+              "type": "markdown",
+              "state": {
+                "file": "hardcore web development/11. SQL/Создание таблиц.md",
+                "mode": "source",
+                "source": false
+              },
+              "icon": "lucide-file",
+              "title": "Создание таблиц"
+            }
+          },
+          {
+            "id": "20423afea12470fd",
+            "type": "leaf",
+            "state": {
+              "type": "markdown",
+              "state": {
+                "file": "printf.md",
+                "mode": "source",
+                "source": false
+              },
+              "icon": "lucide-file",
+              "title": "printf"
             }
           }
-        ]
+        ],
+        "currentTab": 1
       }
     ],
     "direction": "vertical"
@@ -151,13 +180,16 @@
       "markdown-importer:Open format converter": false
     }
   },
-  "active": "e6bea62ed1e6a115",
+  "active": "3e9f239e738f776c",
   "lastOpenFiles": [
+    "hardcore web development/11. SQL/Дата и время.md",
+    "hardcore web development/11. SQL/Типы данных.md",
+    "c/c common.md",
+    "printf.md",
     "hardcore web development/11. SQL/SQL настройка.md",
     "hardcore web development/11. SQL/Комментарии.md",
     "c/syscalls.md",
     "c/GDB.md",
-    "c/c common.md",
     "ASM/asm_x64.md",
     "ROTEK/bt67xx/common.md",
     "ROTEK/BT_6714.md",
@@ -182,9 +214,6 @@
     "Untitled.canvas",
     "hardcore web development/11. SQL/Создание таблиц.md",
     "todo/common.md",
-    "Кодинг.md",
-    "ASM/tools.md",
-    "Untitled.md",
     "hardcore web development/11. SQL/quiz_1.sql",
     "English/img/33-5.jpg",
     "English/img/33-4.jpg",

+ 2 - 0
c/c common.md

@@ -74,3 +74,5 @@ $ cd /proc/<PID>
 $ cat maps # выведет адреса сегментов процесса
 ```
 
+
+~={red}Остановился на 9ой главе=~

+ 90 - 0
hardcore web development/11. SQL/quiz_1.sql

@@ -120,3 +120,93 @@ update smth set a = a * 2;
 select species_name from species 
 order by length(species_name) desc, species_name limit 5;
 
+-- -----------------------------------------------------------------
+-- 11.28 Работа со перечислениями
+
+create table color (
+	name varchar(22) primary key check (name in (
+		'адовый красный',
+		'ядерный зеленый',
+		'подозрительная мурена'
+	))
+);
+
+create table color (
+	name text check (length(name) between 4 and 20)
+);
+
+-- -----------------------------------------------------------------
+-- 11.29 Работа со временем
+
+select to_char(created_at, 'DD.MM.YYYY HH24:MI:SS') "дата инцидента", 
+	message "сообщение" from log;
+
+insert into log (created_at, message) values 
+	('2024-07-31 20:19:51'::timestamp, 'Произошло страшное: сломался приём платежа #1128'),
+    ('2024-07-31 17:19:52'::timestamp, 'Трындец с отправкой почты, похоже, почтовый сервер недоступен!'),
+    ('2024-07-31 17:20:53'::timestamp, 'Ужас, всё работает!');
+
+
+drop table if exists log;
+create temp table log(
+	log_id bigint generated always as identity,
+	created_at timestamp not null,
+	message text not null
+);
+
+insert into log (created_at, message) values
+	('2024-06-02 20:20:20'::timestamp, 'Это событие за прошлый год'),
+	('2025-06-02 20:20:20'::timestamp, 'Это событие за текущий год');
+
+table log;
+
+select * from log where extract(month from(created_at)) = extract(month from now()) 
+and extract(year from(created_at)) = extract(year from now());
+
+-- Вернуть данные за этот месяц
+select * from log
+where date_trunc('month', created_at) = date_trunc('month', current_timestamp)
+order by log_id;
+
+-- Вернуть данные за последнюю неделю
+select * from log where created_at >= current_date - interval '7 days'
+
+-- Удалить данные за последние 30 дней
+delete from log
+where created_at < current_date - intercal '30 days';
+
+-- Прибавить месяц
+select '2024-01-31'::date + '1 month'::interval;
+
+-- Прибавить год
+select '2024-02-29'::date + '1 year'::interval;
+
+-- Эти запросы вернут одинаковое значение
+select '2024-02-28'::date - '1 year'::interval;
+select '2024-02-29'::date - '1 year'::interval;
+
+-- Запрос вернет ответ типа integer
+select '2024-02-01'::date - '2023-01-01'::date d;
+
+-- Запрос вернет ответи типа interval
+select '2024-02-01'::timestamp - '2023-01-01'::timestamp d;
+
+-- Форматирование даты
+select 
+	to_char(start, 'DD.MM.YYYY') start,
+	to_char(finish, 'DD.MM.YYYY') finish
+	extract(day from (finish - start) delta_in_days
+from records order by start, finish;
+
+-- С помощью функции age можно вывести дельту
+select 
+	to_char(start, 'DD.MM.YYYY') start,
+	to_char(finish, 'DD.MM.YYYY') finish
+	age(finish, start) delta
+from records order by start, finish;
+
+-- Достает email тех у кого в апреле день рождения
+select email from employees 
+where extract('month' from birthday)=4
+order by email;
+

+ 37 - 0
hardcore web development/11. SQL/Дата и время.md

@@ -1,3 +1,27 @@
+~={yellow}Типы данных даты и времени=~
+- DATA - для хранения даты, то есть года, месяца и дня
+- TIME - для хранения времени, то есть часов, минут, секунд
+- TIME with time zone - для хранения времени с таймзоной
+- TIMESTAMP - для хранения даты и времени, то есть года, месяца, дня, часов, минут, секунд.
+- TIMESTAMPTZ - для хранения даты и времени с часовым поясом, что может быть удобно для приложений, которые работаю с разными часовыми поясами.
+- INTERVAL - для хранения промежутка времени, очень удобный тип данных.
+
+~={yellow}Интервалы=~
+```sql
+select now(), now() + '1 hour';
+select now(), now() + '1 day';
+select now(), now() + '1 month';
+select now(), now() - '1 month'::interval;
+select now(), now() - '1 hour'::interval;
+select now(), now() - '1 year'::interval;
+select now(), now() - '1 year 1 month'::interval;
+select now(), now() - '1 year 1 month 1 hour'::interval;
+select now(), now() - '1 year 1 month 1 hour 1 minute'::interval;
+select now(), now() - '1 year 1 month 1 hour 1 minute 1 second'::interval;
+```
+
+
+
 ~={yellow}Форматирование даты и времени=~
 ```sql
 --- Создаем таблицу с полем timestamp
@@ -67,6 +91,16 @@ order by start, finish;
 
 Примем использования age() - вывод дельты
 ```sql
+select age('2024-06-21 01:38:11'::timestamp, '2021-01-24 01:12:48'::timestamp);
+-- 3 years 4 mons 28 days 00:25:23
+select extract(day from age('2024-06-21 01:38:11'::timestamp, '2021-01-24 01:12:48'::timestamp));
+-- 28
+select extract(days from age('2024-06-21 01:38:11'::timestamp, '2021-01-24 01:12:48'::timestamp));
+-- 28
+select extract(years from age('2024-06-21 01:38:11'::timestamp, '2021-01-24 01:12:48'::timestamp));
+-- 3
+
+
 select
     to_char(start, 'DD.MM.YYYY') start,
     to_char(finish, 'DD.MM.YYYY') finish,
@@ -83,3 +117,6 @@ where extract('month' from birthday)=4
 order by email;
 ```
 
+~={red}Важное=~
+- now() - это функция в postgres, в SQL - это CURRENT_TIMESTAMP
+- 

+ 12 - 0
hardcore web development/11. SQL/Создание таблиц.md

@@ -67,6 +67,18 @@ create temp table author_without_checks (
 );
 ```
 
+~={yellow}Создание таблицы из другой таблицы=~
+```sql
+create table some_entity_deleted (
+	like some_entity including defaults including constraints including indexes
+);
+```
+
+~={yellow}Можно вставить данные в таблицу из запроса=~
+```sql
+select into some_entity_deleted select * from some_entity where entity=2;
+```
+
 ~={yellow}Создание таблицы из select запроса=~
 ```sql
 create table some_table as select * from base_table;

+ 25 - 0
printf.md

@@ -0,0 +1,25 @@
+~={yellow}Общий вид позиции для форматной вставки:=~
+
+%Флаги Ширина полня "." Точность Модификатор Спецификатор
+
+~={magenta}Спецификаторы:=~
+- s - строка символов
+- c - символ по однобайтовому коду символа
+- d - число со знаком в десятичной системе счисления
+- u - число без знака в десятичной системе счисления
+- x - шестнадцатеричное число без знака, нижний регистр
+- X - шестнадцатеричное число без знака, верхний регистр
+- o - восьмеричное число без знака
+- f - вещественное число
+
+~={magenta}Флаги:=~
+- минус - "прижать" вывод к левой границе отведенного поля
+- пробел - выводить пробел перед положительными числами
+- плюс - выводить знак плюс перед положительными десятичными числами
+- ноль - заполнить свободное пространство слева от 16-ричных и 8-ричных значений нулями
+- решетка - выводить префикс для 8-ричный и 16-ричных чисел
+
+~={magenta}Модификтор=~ - определяет размер выводимого аргумента в байтах
+- h - short - вывод 2 байтового значения
+- l - long - вывод 4 байтового значения
+- ll - long long - вывод 8 байтового значения