Към съдържанието
wannacode

Текстови функции

Накратко: В SQLite текстовите функции слепват текст с ||, мерят дължината му с LENGTH, режат го със SUBSTR, търсят в него с INSTR и го чистят с REPLACE и TRIM.

Проблем

Етикетите на рафта

Магазинът печата етикети за рафтовете: името на продукта и цената, като „Бял хляб (1,20 €)“. Името е в една колона, цената в друга. Трябва ти една колона с готовия текст, за да я пратиш направо на принтера.

Идеята

Слепване с ||

|| слепва текст. Парчетата може да са колони, текст в кавички или числа:

SQLбаза: магазин

Почти. Числото се превръща в текст от само себе си, но в най-краткия си вид: 1.2, с точка и без нулата. За етикет трябват две цифри и запетая.

printf('%.2f', price) пише числото с точно две цифри след точката: 1.20. REPLACE(текст, какво, с какво) сменя точката със запетая:

SQLбаза: магазин

Функциите се влагат една в друга: REPLACE получава готовия текст от printf.

По-точно, за любопитните

printf е функция на SQLite. От версия 3.38 тя се казва и format. В PostgreSQL за същото има to_char(price, 'FM990.00'), а в MySQL FORMAT(price, 2). Ако страницата е на няколко езика, по-добре е числото да остане число, а програмата, която показва страницата, да го оформи.

Пробвай

Получателят на писмото

Пощенските програми показват адреса като „Мария Иванова <maria.ivanova@example.com>“. Направи такава колона за всеки клиент и я наречи recipient.

SQLбаза: магазин

Виж го

Един град липсва

Куриерът иска ред „име, град“ за всеки клиент:

SQLбаза: магазин
1. Защо за Борис Митев контактът е NULL?

Когато колоната може да е NULL, слепеният текст също може да е NULL. Как да сложиш думи на мястото на липсващия град, ще видиш в урока за CASE и COALESCE.

Идеята

Части от текста

Функциите за текст, които ще ползваш най-често:

  • LENGTH(t): колко знака има.
  • SUBSTR(t, от, колко): парче от текста. Броенето започва от 1.
  • INSTR(t, част): на кое място е частта, или 0, ако я няма.
  • UPPER(t) и LOWER(t): главни и малки букви.
  • REPLACE(t, какво, с какво) и TRIM(t), който маха интервалите в началото и в края.
SQLбаза: магазин

SUBSTR и INSTR заедно режат текст на точното място. Домейнът на имейла е всичко след @:

SQLбаза: магазин

TRIM трябва, когато данните идват от формуляр или от електронна таблица и някой е оставил интервал:

SQLбаза: магазин

Пробвай

Инициали

За картите за отстъпка трябват инициалите на клиента: „М. И.“ за Мария Иванова. Покажи името и инициалите в колона initials.

SQLбаза: магазин

Виж го

LOWER и кирилицата

Сайтът иска адрес за всеки продукт от вида бял-хляб: малки букви, тире вместо интервал. Пусни:

SQLбаза: магазин

Тиретата са там, но „Бял“ е с главно „Б“. Вградените UPPER и LOWER в SQLite сменят само латинските букви:

SQLбаза: магазин

Същото видя при LIKE: за SQLite „Б“ и „б“ са два различни знака. Грешка няма, затова това често се пропуска.

По-точно, за любопитните

PostgreSQL и MySQL с текст в UTF-8 сменят правилно и кирилицата. В SQLite има разширение (ICU), което учи UPPER, LOWER и LIKE на всички азбуки, но в браузъра тук го няма. Затова програмите, които ползват SQLite, често пазят текста за търсене в отделна колона, вече с малки букви, сметнати в програмата.

Упражнение

Две задачи

1. На етикета се побират 15 знака. Кои продукти имат по-дълго име? Покажи името и дължината му в колона length.

Продуктите с име над 15 знака:

SQLбаза: магазин

2. Новата система за вход иска потребителско име: частта от имейла преди @. Покажи имейла и потребителското име в колона username.

Имейлът и потребителското име на всеки клиент:

SQLбаза: магазин

Тест

Провери се

1. Какво дава 'Бял' || ' ' || 'хляб'?
2. Какво връща SUBSTR('Кашкавал', 1, 4)?
3. Какво връща INSTR('Сирене', ' ')?
4. Какво дава UPPER('кафе') в SQLite?

Създаден от Иво Гергов като част от кампанията на Evo Tech за достъпно обучение по програмиране ·