Поиск по шаблону, LIKE. Функции для работы с датой и временем

Поиск по шаблону, LIKE

Предположим, мы знаем, что в имени курса есть слово Linux, но точное название курса нам неизвестно. В этом случае воспользуемся функцией сопоставления с шаблоном LIKE. Передадим этой функции параметром искомую строку, заключённую с двух сторон символами процента. Символ процента — это знак подстановки, который говорит, что в этой части строки находится любое количество разных символов:

sqlite> SELECT name, lessons_amount FROM courses WHERE name LIKE('%Linux%'); name               lessons_amount ---------------------- -------------- Linux. Рабочая станция 8             sqlite>

 

На практике для этой функции скобки часто не используются. Тогда наш запрос примет следующий вид:

sqlite> SELECT name, lessons_amount FROM courses WHERE name LIKE '%Linux%'; name               lessons_amount ---------------------- -------------- Linux. Рабочая станция 8             sqlite> 

Функции для работы с датой и временем

Хотя SQLite не имеет специального типа данных для даты и времени, воспользуемся некоторыми функциями для выполнения задач с хранением и выборкой таких значений.

Чтобы получить текущее значение даты и времени, применяется функция CURRENT_TIMESTAMP:

sqlite> SELECT CURRENT_TIMESTAMP; 2021-01-05 17:21:20 sqlite>

 

В результате мы получим дату и время выполнения запроса в формате «год-месяц-число часы:минуты:секунды». Такое представление часто используется в реляционных базах данных, так как оно называется «формат баз данных».

Чтобы работать с текущей датой и временем, ещё используются функции DATE, TIME, DATETIME, которые ссылаются на текущее время посредством now:

sqlite> SELECT DATE('now'); DATE('now') ----------- 2021-01-10 sqlite> SELECT TIME('now'); TIME('now') ----------- 09:04:57   sqlite> SELECT DATETIME('now'); DATETIME('now')    ------------------- 2021-01-10 09:05:02 sqlite>

 

При использовании этих функций с CURRENT_TIMESTAMP мы получим аналогичный результат:

sqlite> SELECT DATE(CURRENT_TIMESTAMP); DATE(CURRENT_TIMESTAMP) ----------------------- 2021-01-10             sqlite> SELECT TIME(CURRENT_TIMESTAMP); TIME(CURRENT_TIMESTAMP) ----------------------- 09:17:37               sqlite> SELECT DATETIME(CURRENT_TIMESTAMP); DATETIME(CURRENT_TIMESTAMP) --------------------------- 2021-01-10 09:17:46        sqlite>

 

На практике функции CURRENT_TIMESTAMP и now взаимозаменяемые. Используйте тот вариант, который считаете удобным.

Дата и время также выделяются из строки:

sqlite> SELECT DATE('2021-01-05 17:21:20'); DATE('2021-01-05 17:21:20') --------------------------- 2021-01-05   sqlite> SELECT TIME('2021-01-05 17:21:20'); TIME('2021-01-05 17:21:20') --------------------------- 17:21:20 sqlite>

 

Если посмотрим текущий формат даты начала обучения в таблице по потокам, то увидим, что он не соответствует стандартному формату.

sqlite> SELECT start_date FROM streams; start_date ---------- 18.08.2020 02.10.2020 12.11.2020 sqlite>

 

Привести данные к подходящему виду позволит функция SUBSTRING (сокращённо — SUBSTR), вырезающая часть строки.

Чтобы понять, как работает эта функция, рассмотрим сначала простой пример. Пусть из текущей даты, которая получена функцией CURRENT_TIMESTAMP, нам надо получить только год.

sqlite> SELECT CURRENT_TIMESTAMP; CURRENT_TIMESTAMP  ------------------- 2021-01-10 09:39:37 sqlite>

 

Определим, в каких позициях символов находится значение года — год начинается с позиции 1, и вырезать потребуется 4 символа. Тогда для получения подходящего значения надо воспользоваться выражением SUBSTR(CURRENT_TIMESTAMP, 1, 4):

sqlite> SELECT SUBSTR(CURRENT_TIMESTAMP, 1, 4); SUBSTR(CURRENT_TIMESTAMP, 1, 4) ------------------------------- 2021                           sqlite>

То есть первым аргументом функции SUBSTR мы задаём строку, которую хотим обработать, вторым — позицию первого символа требуемой нам подстроки. Третьим аргументом определяем количество символов.

Применим аналогичный подход, чтобы преобразовать даты начала занятий таблицы, относящейся к потокам так, как нам надо. Вырежем:

● сначала год — начинается с символа 7 длиной 4 символа;

● затем месяц — начинается с символа 4 длиной 2 символа;

● и дату — начинается с символа 1 длиной 2 символа.

Чтобы объединить все части даты нового формата в одну строку, применяем в качестве оператора конкатенации две вертикальных черты ||:

sqlite> SELECT SUBSTR(start_date, 7, 4) || '-' || SUBSTR(start_date, 4, 2) || '-' || SUBSTR(start_date, 1, 2) FROM streams; 2020-08-18 2020-10-02 2020-11-12 sqlite>

 

Пример выше покажет даты в требуемом формате на экране, но в таблице формат её хранения не изменится. Чтобы внести изменения, скомпонуем команду на обновление UPDATE, используя то же выражение для замены значения в столбце start_date:

sqlite> UPDATE streams SET start_date = SUBSTR(start_date, 7, 4) || '-' || SUBSTR(start_date, 4, 2) || '-' || SUBSTR(start_date, 1, 2); sqlite> SELECT * FROM streams; id     number course_id start_date ---------- ---------- ---------- ---------- 1      45     2      2020-08-18 2      48     3      2020-10-02 3      54     1      2020-11-12 sqlite>

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: