Kotchasan Framework Documentation

Kotchasan Framework Documentation

SQL Functions

TH 05 Feb 2026 06:23

SQL Functions

\Kotchasan\Database\Sql เป็น helper class สำหรับสร้าง SQL functions ที่รองรับหลาย database

การใช้งาน

use Kotchasan\Database\Sql;

// ใน SELECT
$query = Model::createQuery()
    ->select('id', Sql::COUNT('*', 'total'))
    ->from('orders')
    ->groupBy('status');

// ใน WHERE
$query->where(Sql::BETWEEN('created_at', '2024-01-01', '2024-12-31'));

หมายเหตุ: ถ้าต้องการอ้างอิงคอลัมน์ในพารามิเตอร์ ให้ใช้ Sql::column('column_name') ส่วน string ธรรมดาจะถูกมองเป็นค่า literal โดยอัตโนมัติ และสามารถใช้ Sql::_strValue('N/A') เพื่อสื่อเจตนาให้ชัดเจนได้

Aggregate Functions

COUNT()

Sql::COUNT();                           // COUNT(*)
Sql::COUNT('*', 'total');               // COUNT(*) as total
Sql::COUNT('id', 'cnt', true);          // COUNT(DISTINCT id) as cnt

SUM() / AVG() / MIN() / MAX()

Sql::SUM('total', 'sum_total');
Sql::AVG('price', 'avg_price');
Sql::MIN('created_at', 'first_order');
Sql::MAX('created_at', 'last_order');

String Functions

CONCAT()

// CONCAT(first_name, ' ', last_name) as fullname
Sql::CONCAT(['first_name', "' '", 'last_name'], 'fullname');

// CONCAT_WS(' ', first_name, last_name)
Sql::CONCAT(['first_name', 'last_name'], 'fullname', ' ');

GROUP_CONCAT()

// GROUP_CONCAT(name SEPARATOR ', ')
Sql::GROUP_CONCAT('name', 'names', ', ');

// GROUP_CONCAT(DISTINCT name ORDER BY name)
Sql::GROUP_CONCAT('name', 'names', ',', true, 'name');

LENGTH() / UPPER() / LOWER()

Sql::LENGTH('content', 'char_count');
Sql::UPPER('name', 'name_upper');
Sql::LOWER('email', 'email_lower');

TRIM() / LTRIM() / RTRIM()

Sql::TRIM('name', 'clean_name');
Sql::LTRIM('name');
Sql::RTRIM('name');

SUBSTRING() / REPLACE()

// SUBSTRING(content, 1, 100)
Sql::SUBSTRING('content', 1, 100, 'preview');

// REPLACE(content, 'old', 'new')
Sql::REPLACE('content', 'old', 'new', 'updated');

// ใช้คอลัมน์แทนค่า literal
Sql::REPLACE('content', Sql::column('old'), 'new', 'updated');

Date Functions

NOW() / CURDATE() / CURTIME()

Sql::NOW();                  // NOW()
Sql::CURDATE();              // CURDATE()
Sql::CURTIME();              // CURTIME()

DATE() / YEAR() / MONTH() / DAY()

Sql::DATE('created_at', 'date_only');     // DATE(created_at)
Sql::YEAR('created_at', 'year');          // YEAR(created_at)
Sql::MONTH('created_at', 'month');        // MONTH(created_at)
Sql::DAY('created_at', 'day');            // DAY(created_at)

DATE_FORMAT()

// MySQL format
Sql::DATE_FORMAT('created_at', '%Y-%m-%d', 'formatted');

DATEDIFF()

// จำนวนวันระหว่าง 2 วันที่
Sql::DATEDIFF('end_date', 'start_date', 'days');

Conditional Functions

IF()

// IF(status = 1, 'Active', 'Inactive')
Sql::IF_EXPR('status = 1', "'Active'", "'Inactive'", 'status_text');

CASE

Sql::CASE_WHEN([
    ['status = 1', "'Active'"],
    ['status = 0', "'Inactive'"]
], "'Unknown'", 'status_label');

IFNULL() / COALESCE()

// IFNULL(phone, 'N/A')
Sql::IFNULL('phone', "'N/A'", 'phone');

// COALESCE(phone, mobile, 'N/A')
Sql::COALESCE(['phone', 'mobile', "'N/A'"], 'contact');

Math Functions

Sql::ABS('value');
Sql::CEIL('value');
Sql::FLOOR('value');
Sql::ROUND('value', 2);
Sql::RAND();

Comparison

BETWEEN

// price BETWEEN 100 AND 1000
Sql::BETWEEN('price', 100, 1000);

IN / NOT IN

Sql::IN('status', [1, 2, 3]);
Sql::NOT_IN('status', [0, -1]);

หมายเหตุ: ถ้า list ว่าง IN() จะคืนค่า 0=1 และ NOT_IN() จะคืนค่า 1=1 เพื่อหลีกเลี่ยง SQL ที่ไม่ถูกต้อง

DISTINCT

Sql::DISTINCT('category');

Method Reference

Aggregate

Method Description
COUNT($col, $alias, $distinct) นับจำนวน
SUM($col, $alias) ผลรวม
AVG($col, $alias, $distinct) ค่าเฉลี่ย
MIN($col, $alias) ค่าน้อยสุด
MAX($col, $alias) ค่ามากสุด

String

Method Description
CONCAT($fields, $alias, $sep) ต่อ string
GROUP_CONCAT($fields, $alias, $sep, $distinct, $order) ต่อ string ใน group
LENGTH($col, $alias) ความยาว string
UPPER($col, $alias) แปลงเป็นตัวพิมพ์ใหญ่
LOWER($col, $alias) แปลงเป็นตัวพิมพ์เล็ก
TRIM($col, $alias) ตัดช่องว่าง
LTRIM($col, $alias) ตัดช่องว่างด้านซ้าย
RTRIM($col, $alias) ตัดช่องว่างด้านขวา
SUBSTRING($col, $start, $len, $alias) ตัด string
REPLACE($col, $search, $replace, $alias) แทนที่ string

Date

Method Description
NOW() วันเวลาปัจจุบัน
CURDATE() วันที่ปัจจุบัน
CURTIME() เวลาปัจจุบัน
DATE($col, $alias) แยกวันที่
YEAR($col, $alias) แยกปี
MONTH($col, $alias) แยกเดือน
DAY($col, $alias) แยกวัน
DATE_FORMAT($col, $format, $alias) format วันที่
DATEDIFF($col1, $col2, $alias) ความต่างของวันที่

Conditional

Method Description
IF_EXPR($cond, $true, $false, $alias) IF condition
CASE_WHEN($cases, $else, $alias) CASE expression
IFNULL($col, $default, $alias) default ถ้า null
COALESCE($values, $alias) ค่าแรกที่ไม่ null

Comparison

Method Description
BETWEEN($col, $min, $max) ช่วงค่า
IN($col, $values) อยู่ในรายการ
NOT_IN($col, $values) ไม่อยู่ในรายการ

คณิตศาสตร์

Method Description
ABS($col, $alias) ค่าสัมบูรณ์
CEIL($col, $alias) ปัดขึ้น
FLOOR($col, $alias) ปัดลง
ROUND($col, $precision, $alias) ปัดเศษตามจำนวนตำแหน่ง

คลาสที่เกี่ยวข้อง