MySQL / String функцүүд

String функцүүд

MySQL нь текст боловсруулах олон функцтэй. Хэрэглэгчийн нэр форматлах, хайлт хийх, өгөгдөл цэвэрлэх зэрэгт өдөр тутам хэрэглэгддэг.

CONCAT — текст нэгтгэх

sql
SELECT CONCAT('Сайн ', 'уу, ', 'дэлхий!');
-- Үр дүн: Сайн уу, дэлхий!

-- Хэд хэдэн багана нэгтгэх
SELECT CONCAT(first_name, ' ', last_name) AS бүтэн_нэр
FROM users;

-- NULL байвал бүхэлдээ NULL болно
SELECT CONCAT('Нэр: ', NULL);
-- Үр дүн: NULL

-- NULL-с хамгаалах
SELECT CONCAT('Нэр: ', COALESCE(name, 'Тодорхойгүй'))
FROM users;

CONCAT_WS(хязгаарлагч, ...) — тусгаарлагчтайгаар нэгтгэнэ:

sql
SELECT CONCAT_WS(', ', 'Болд', 'Дорж', NULL, 'Оюун');
-- Үр дүн: Болд, Дорж, Оюун  (NULL алгасагдана)

LENGTH ба CHAR_LENGTH

sql
SELECT LENGTH('MySQL');        -- 5 (байт тоо)
SELECT CHAR_LENGTH('MySQL');   -- 5 (тэмдэгтийн тоо)

-- Кирилл үсгэнд ялгаа гарна (UTF-8 нэг кирилл = 2 байт)
SELECT LENGTH('Сайн уу');       -- 14 (байт)
SELECT CHAR_LENGTH('Сайн уу');  -- 7  (тэмдэгт)

Монгол текстэд заавал CHAR_LENGTH ашиглах — байт тооны оронд жинхэнэ тэмдэгтийн тоо авна.

SUBSTRING — хэсэг авах

sql
-- SUBSTRING(текст, эхлэх_байрлал, урт)
SELECT SUBSTRING('MySQL Database', 1, 5);
-- Үр дүн: MySQL

SELECT SUBSTRING('MySQL Database', 7);
-- Үр дүн: Database  (7-оос эцэс хүртэл)

SELECT SUBSTRING('MySQL Database', -8);
-- Үр дүн: Database  (сүүлийн 8 тэмдэгт)

Байрлал 1-ээс эхэлдэг — 0 биш.

UPPER ба LOWER

sql
SELECT UPPER('mysql database');   -- MYSQL DATABASE
SELECT LOWER('MYSQL DATABASE');   -- mysql database

-- И-мэйл хадгалахдаа жижиг үсгээр стандартчилах
INSERT INTO users (email)
VALUES (LOWER('Oyuun@Example.COM'));
-- Хадгалагдах утга: oyuun@example.com

TRIM — хоосон зай арилгах

sql
SELECT TRIM('  MySQL  ');         -- 'MySQL'
SELECT LTRIM('  MySQL  ');        -- 'MySQL  '  (зүүн талаасаа)
SELECT RTRIM('  MySQL  ');        -- '  MySQL'  (баруун талаасаа)

-- Тодорхой тэмдэгт арилгах
SELECT TRIM(BOTH '-' FROM '---MySQL---');  -- 'MySQL'

Хэрэглэгч оруулсан мэдээллийн эхэнд эцэст ихэвчлэн санамсаргүй хоосон зай байдаг — хадгалахын өмнө TRIM хийх нь зөв.

REPLACE — орлуулах

sql
SELECT REPLACE('Hello World', 'World', 'MySQL');
-- Үр дүн: Hello MySQL

-- Утасны дугаарнаас зай арилгах
UPDATE users
SET phone = REPLACE(REPLACE(phone, ' ', ''), '-', '');
-- '976 9911-2233' → '97699112233'

LIKE — хэв загварт тохируулах хайлт

sql
-- % — ямар ч урттай текст
SELECT * FROM users WHERE name LIKE 'Б%';    -- Б-ээр эхэлсэн
SELECT * FROM users WHERE name LIKE '%д';    -- д-ээр дуусах
SELECT * FROM users WHERE email LIKE '%@gmail.com';

-- _ — яг нэг тэмдэгт
SELECT * FROM users WHERE code LIKE 'MN___'; -- MN + 3 тэмдэгт

LIKE нь том жижиг үсэг ялгахгүй (Болд = болд). Ялгах шаардлагатай бол LIKE BINARY ашиглана.

REGEXP — тогтмол илэрхийлэл

sql
-- Зөвхөн тоо агуулсан
SELECT * FROM products WHERE code REGEXP '^[0-9]+$';

-- И-мэйл шалгах (хялбаршуулсан)
SELECT * FROM users WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$';

-- Монгол кирилл үсэг агуулсан
SELECT * FROM content WHERE text REGEXP '[А-ЯӨҮа-яөү]';

Бусад хэрэгтэй функцүүд

sql
-- INSTR: байрлал олох (олдохгүй бол 0)
SELECT INSTR('MySQL Database', 'Data');  -- 7

-- LPAD / RPAD: урт нөхөх
SELECT LPAD('42', 5, '0');   -- 00042
SELECT RPAD('Код', 6, '-');  -- Код---

-- REVERSE: урвуу болгох
SELECT REVERSE('MySQL');     -- LQSyM

-- REPEAT: давтах
SELECT REPEAT('*', 5);       -- *****

Жишээ: өгөгдөл цэвэрлэх

sql
-- Хэрэглэгчийн мэдээллийг стандартчилах
UPDATE users SET
  email     = LOWER(TRIM(email)),
  first_name = TRIM(first_name),
  last_name  = TRIM(last_name),
  phone      = REPLACE(REPLACE(REPLACE(phone, ' ', ''), '-', ''), '+', '');

Дараагийн хичээлд:

Date функцүүд — огноо цаг боловсруулах NOW(), DATE_FORMAT(), DATEDIFF() зэрэг функцүүдийг үзнэ.