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

SQL Server PARSENAME 函數巧用:點分隔字串擷取與 IP 解析

     編輯:關於SqlServer

函數語法與原理

PARSENAME ( 'object_name' , object_piece )
  • 原設計用途:解析四段式物件名稱 Server.Database.Schema.Object
  • object_piece:1=Object、2=Schema、3=Database、4=Server
  • **核心特性**:以 **點 (.)** 為分隔符,**從右向左** 計數

常見應用場景

1. IP 位址拆解


-- 假設表 cs 有欄位 ip 儲存 '192.168.1.100'
SELECT 
    PARSENAME(ip, 4) AS Octet1,  -- 192
    PARSENAME(ip, 3) AS Octet2,  -- 168
    PARSENAME(ip, 2) AS Octet3,  -- 1
    PARSENAME(ip, 1) AS Octet4   -- 100
FROM cs;

2. 任意點分隔字串擷取


SELECT PARSENAME('A.B.C.D.E.F', 2);  -- 結果: 'E' (倒數第 2 段)
SELECT PARSENAME('A.B.C.D.E.F', 4);  -- 結果: 'C'

3. 檔案路徑/版本號解析


-- 版本號 '10.50.4000.0' 取 Major.Minor
SELECT PARSENAME('10.50.4000.0', 4) + '.' + PARSENAME('10.50.4000.0', 3); -- '10.50'

-- 檔名 'report.final.v2.docx' 取副檔名
SELECT PARSENAME('report.final.v2.docx', 1); -- 'docx'

限制與注意事項

  • **僅支援 4 段**:超過 4 個點時,第 5 段起回傳 NULL
  • **分隔符固定為點**;需處理其他分隔符時,先 REPLACE(str, '/', '.')
  • 輸入為 NULL 時回傳 NULL
  • 非物件名稱用屬「側門用法」,文件雖未明確禁止,但跨版本行為一致

替代方案 (超過 4 段或複雜分隔)

  • STRING_SPLIT (SQL 2016+) + 序號過濾
  • JSON_VALUE (SQL 2016+) 配合 REPLACE 轉 JSON 陣列
  • 自訂分割函數 (CLR 或 T-SQL 遞迴 CTE)

PARSENAME 是處理固定四段點分隔字串 (IP、版本號、四段式命名) 的極簡利器,善用可避免複雜的 CHARINDEX/SUBSTRING 組合。

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