需求:`unitcode` 欄位存 `1002`、`12345`、`123456` 等不定長數字字串,要**去掉後 3 位**,保留前段 (如 `1002` → `1`,`12345` → `12`)。
-- 硬編碼長度,僅適用定長
SELECT SUBSTR(unitcode, 1, 3) FROM g3_unit; -- 錯誤:只取前 3 字元
SELECT SUBSTR(unitcode, 1, LENGTH(unitcode) - 3) AS prefix
FROM g3_unit
WHERE LENGTH(unitcode) > 3; -- 防止負長度報錯
| 函數 | MySQL | Oracle | SQL Server | PostgreSQL |
|---|---|---|---|---|
| 長度 | `LENGTH()` / `CHAR_LENGTH()` | `LENGTH()` | `LEN()` | `LENGTH()` |
| 截取 | `SUBSTR()` / `SUBSTRING()` | `SUBSTR()` | `SUBSTRING()` | `SUBSTRING()` |
同理,「取後 N 位」用 `SUBSTR(unitcode, -N)` (MySQL/Oracle) 或 `RIGHT(unitcode, N)` (SQL Server/PG)。