首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL 截取數字串前 N 位:用 `LENGTH()` 動態計算長度,避免硬編碼

     編輯:程式設計綜合問答

需求:`unitcode` 欄位存 `1002`、`12345`、`123456` 等不定長數字字串,要**去掉後 3 位**,保留前段 (如 `1002` → `1`,`12345` → `12`)。

錯誤寫法

-- 硬編碼長度,僅適用定長
SELECT SUBSTR(unitcode, 1, 3) FROM g3_unit; -- 錯誤:只取前 3 字元

正確通用寫法 (MySQL/Oracle/PostgreSQL/SQL Server 通用)

SELECT SUBSTR(unitcode, 1, LENGTH(unitcode) - 3) AS prefix
FROM g3_unit
WHERE LENGTH(unitcode) > 3;  -- 防止負長度報錯
  • `LENGTH(unitcode)` 動態取得實際長度。
  • `-3` 即「去掉後 3 位」。
  • `WHERE` 子句過濾長度不足的行,避免 `SUBSTR` 參數異常。

資料庫差異備註

函數MySQLOracleSQL ServerPostgreSQL
長度`LENGTH()` / `CHAR_LENGTH()``LENGTH()``LEN()``LENGTH()`
截取`SUBSTR()` / `SUBSTRING()``SUBSTR()``SUBSTRING()``SUBSTRING()`

同理,「取後 N 位」用 `SUBSTR(unitcode, -N)` (MySQL/Oracle) 或 `RIGHT(unitcode, N)` (SQL Server/PG)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved