首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 字串函數完整參考與實用範例

     編輯:關於SqlServer

字串函數速查表

函數用途回傳型別備註
LEN(str)字串長度 (不含尾端空白)INT輸入 NULL 回傳 NULL
LOWER(str)轉小寫VARCHAR/NVARCHAR
UPPER(str)轉大寫VARCHAR/NVARCHAR
LTRIM(str)移除左側空白VARCHAR/NVARCHAR不處理中間空白
RTRIM(str)移除右側空白VARCHAR/NVARCHAR
SUBSTRING(str, start, len)取子字串 (起始位置從 1 算起)VARCHAR/NVARCHARstart=0 視同空字串
CHARINDEX(sub, str)搜尋子字串位置 (1-based, 0=找不到)INT不區分大小視定序而定
LEFT(str, len)取左側 N 字元VARCHAR/NVARCHAR等同 SUBSTRING(str,1,len)
RIGHT(str, len)取右側 N 字元VARCHAR/NVARCHAR等同 SUBSTRING(str, LEN-len+1, len)
REPLACE(str, old, new)取代所有符合的子字串VARCHAR/NVARCHARnew='' 可作刪除用
ASCII(str)取第一字元 ASCII 碼INTNULL/空字串回傳 NULL
CHAR(code)ASCII 碼轉字元CHAR(1)
DIFFERENCE(str1, str2)發音相似度 0~4 (SOUNDEX 差異)INT值越大越相似

實用範例集

1. 去除前後空白 (TRIM 效果)

SELECT LTRIM(RTRIM('  abc  '));  -- 'abc'

2. 移除字串中所有空白

SELECT REPLACE(' a b c ', ' ', '');  -- 'abc'

3. 取檔名不含副檔名

DECLARE @f VARCHAR(100) = 'report_2023.pdf';
SELECT LEFT(@f, CHARINDEX('.', @f) - 1);  -- 'report_2023'

4. 取副檔名

SELECT RIGHT(@f, CHARINDEX('.', REVERSE(@f)) - 1);  -- 'pdf'

5. 遮罩敏感資訊 (只留前 3 後 2)


SELECT LEFT(id, 3) + REPLICATE('X', LEN(id)-5) + RIGHT(id, 2)
FROM Customers;

6. 字串分割 (搭配數字表/遞迴 CTE)


-- 簡易版:固定分隔符 ','
DECLARE @s VARCHAR(100) = 'a,b,c,d';
WITH cte AS (
  SELECT 1 AS pos, CHARINDEX(',', @s) AS nxt
  UNION ALL
  SELECT nxt+1, CHARINDEX(',', @s, nxt+1) FROM cte WHERE nxt > 0
)
SELECT SUBSTRING(@s, pos, CASE WHEN nxt>0 THEN nxt-pos ELSE LEN(@s)+1 END) AS token
FROM cte;

NULL 處理一致性

所有字串函數輸入 NULL 皆回傳 NULL (除 ISNULL/COALESCE 外)。建議查詢前用 ISNULL(col, '') 預處理。

效能提示

  • 避免在 WHERE 條件對欄位使用函數 (如 WHERE LEFT(col,3)='abc'),會導致索引掃描;改寫為 WHERE col LIKE 'abc%'。
  • 大量字串操作考慮 CLR 函數或應用層處理。
  • REPLACE、SUBSTRING 在巨量列上較耗 CPU,必要時建立計算欄位持久化。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved