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

SQL Server 實用特殊函數完全指南:ISNUMERIC、PATINDEX、NEWID 等七大函數深度解析

     編輯:關於SqlServer

1. ISNUMERIC - 數值型別驗證

判斷運算式是否為有效數值型別 (int、money、float 等),回傳 1 或 0。

-- 查詢非數值資料列
SELECT * FROM tablename WHERE ISNUMERIC(columnname) <> 1;

2. ISDATE - 日期時間驗證

驗證運算式是否為有效 date、time 或 datetime 值。

IF ISDATE('2009-05-12 10:19:41.177') = 1
    PRINT '有效日期';
ELSE
    PRINT '無效日期';

3. PATINDEX - 模式搜尋 (支援萬用字元)

回傳模式首次出現的起始位置,支援萬用字元,比 CHARINDEX 更強大。

-- 基本用法
SELECT PATINDEX('%BB%', 'AA_BB_CC_DD'); -- 回傳 4

-- 進階:搜尋數字後接大寫字母
SELECT PATINDEX('%[0-9][A-Z]%', 'AA_BB_9C_DD'); -- 回傳 7
SELECT CHARINDEX('%[0-9][A-Z]%', 'AA_BB_9C_DD'); -- 回傳 0 (不支援萬用字元)

4. NEWID - 產生唯一識別碼 (GUID)

產生 uniqueidentifier 型別的全域唯一值,無規律且不重複。

DECLARE @myid UNIQUEIDENTIFIER;
SET @myid = NEWID();
PRINT @myid; -- 範例: 0B939411-4827-485E-884B-5BEB1699CFEE

5. COLLATE - 定序規則指定

控制字串比較、排序規則,支援中文筆畫、拼音、區分大小寫/腔調等。

-- 建立測試資料
CREATE TABLE #tempTalbe (_id INT, _name VARCHAR(30));
INSERT INTO #tempTalbe VALUES (1,'中'),(2,'國'),(3,'人');

-- 拉丁文定序 (預設)
SELECT * FROM #tempTalbe ORDER BY _name COLLATE Latin1_General_CS_AS_KS_WS ASC;
-- 結果: 中、國、人

-- 中文繁體筆畫定序
SELECT * FROM #tempTalbe ORDER BY _name COLLATE Chinese_Taiwan_Stroke_CS_AS_KS_WS ASC;
-- 結果: 依筆畫排序

-- 查詢所有可用定序
SELECT * FROM fn_helpcollations();

6. SP_EXECUTESQL - 參數化動態 SQL

優於 EXECUTE:支援參數替換、執行計畫重用、效能更佳。

DECLARE @tbname NVARCHAR(20) = '#tb_suer';
DECLARE @sql NVARCHAR(500) = 'SELECT * FROM ' + @tbname;
EXEC sp_executesql @sql;

7. CHECKSUM - 資料列雜湊值計算

計算資料列或運算式的校驗和,常用於雜湊索引、資料比對。

-- 找出 T1 有但 T 沒有的資料列 (整列比對)
SELECT * FROM t1 
WHERE CHECKSUM(*) NOT IN (SELECT CHECKSUM(*) FROM t);

函數選擇快速參考表

需求推薦函數關鍵特性
驗證純數字ISNUMERIC包含 money、float 等數值型別
驗證日期格式ISDATE支援 date/time/datetime
模糊搜尋/正則模式PATINDEX支援萬用字元、字元類別 []
產生唯一識別碼NEWIDGUID、全域唯一
自訂排序規則COLLATE中文筆畫/拼音、大小寫敏感度
動態 SQL 執行SP_EXECUTESQL參數化、計畫重用、防注入
快速資料比對CHECKSUM雜湊值、整列比較
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved