天天看點

SQL Server 遊标運用:滑鼠軌迹字元串分割一.本文所涉及的内容(Contents)二.背景(Contexts)三.遊标模闆(Cursor Template)四.滑鼠軌迹字元串分割SQL腳本實作(SQL Codes)五.補充說明(Addon)

<a href="#_labelContents">本文所涉及的内容(Contents)</a>

<a href="#_labelContexts">背景(Contexts)</a>

<a href="#_labelCursorTemplate">遊标模闆(Cursor Template)</a>

<a href="#_labelSQLCodes">滑鼠軌迹字元串分割SQL腳本實作(SQL Codes)</a>

<a href="#_labelAddon">補充說明(Addon)</a>

  我們的系統中記錄了使用者的滑鼠行為軌迹字元串,這些字元串的格式是:PosSet:[573,1103,2010-09-03 22:32:35],[864,110,2010-09-03 22:32:57],這個字段表示使用者點選頁面的X坐标,Y坐标,時間。現在要求對這樣字元串進行分割。

  需要注意的是當字元串隻有一個坐标的時候,如:PosSet:[513,1303,2010-09-03 22:34:35],你需要考慮這種情況的處理,因為這個時候就沒有分隔字元在字元串了。

  還需要考慮字元串不規則的時候的異常處理;

SQL Server 遊标運用:滑鼠軌迹字元串分割一.本文所涉及的内容(Contents)二.背景(Contexts)三.遊标模闆(Cursor Template)四.滑鼠軌迹字元串分割SQL腳本實作(SQL Codes)五.補充說明(Addon)

(Figure1:基礎資料)

SQL Server 遊标運用:滑鼠軌迹字元串分割一.本文所涉及的内容(Contents)二.背景(Contexts)三.遊标模闆(Cursor Template)四.滑鼠軌迹字元串分割SQL腳本實作(SQL Codes)五.補充說明(Addon)

(Figure2:實作效果圖)

  在正式解決問題之前我先提供一個遊标的模闆,它簡單的實作了找出資料庫中所有的資料庫名,其實這個模闆的目的是為了提供一個規範化的遊标SQL代碼模闆。

SQL Server 遊标運用:滑鼠軌迹字元串分割一.本文所涉及的内容(Contents)二.背景(Contexts)三.遊标模闆(Cursor Template)四.滑鼠軌迹字元串分割SQL腳本實作(SQL Codes)五.補充說明(Addon)

(Figure3:傳回資料庫名)

(一) 首先建立測試表VisiteLog,并插入測試資料:

SQL Server 遊标運用:滑鼠軌迹字元串分割一.本文所涉及的内容(Contents)二.背景(Contexts)三.遊标模闆(Cursor Template)四.滑鼠軌迹字元串分割SQL腳本實作(SQL Codes)五.補充說明(Addon)

(Figure4:基礎資料)

(二) 接着建立表PosSetInfo,這個表是用來儲存滑鼠軌迹字元串分割後的資料:

(三) 根據滑鼠軌迹字元串:[573,1103,2010-09-03 22:32:35],[864,110,2010-09-03 22:32:57]。它坐标點與坐标點之間的分隔符是“,”,X坐标與Y坐标同樣适用分隔符“,”,這給我們的分割帶來了一些不便,是以我們建立了一個函數,它的作用是把字元串@str以@split分隔符進行分隔,傳回第@index次比對的元素。如下圖所示:

SQL Server 遊标運用:滑鼠軌迹字元串分割一.本文所涉及的内容(Contents)二.背景(Contexts)三.遊标模闆(Cursor Template)四.滑鼠軌迹字元串分割SQL腳本實作(SQL Codes)五.補充說明(Addon)

(Figure5:函數測試效果)

(四) 下面的SQL腳本就是對VisiteLog表的資料進行分割,再把分割後的字元串儲存到PosSetInfo表中,這個腳本的主要做法是先把[573,1103,2010-09-03 22:32:35],[864,110,2010-09-03 22:32:57]以“]”做為分隔符,把資料分割成兩段:[573,1103,2010-09-03 22:32:35]和[864,110,2010-09-03 22:32:57],再以“,”做為分割符,找出X坐标、Y坐标和時間;

執行完上面運用遊标的SQL腳本,現在檢視PosSetInfo表的資料,傳回的結果如下圖所示:

SQL Server 遊标運用:滑鼠軌迹字元串分割一.本文所涉及的内容(Contents)二.背景(Contexts)三.遊标模闆(Cursor Template)四.滑鼠軌迹字元串分割SQL腳本實作(SQL Codes)五.補充說明(Addon)

(Figure6:分割後資料)

(一) 如果需要循環每個資料庫進行操作,你可以使用下面的SQL腳本:

SQL Server 遊标運用:滑鼠軌迹字元串分割一.本文所涉及的内容(Contents)二.背景(Contexts)三.遊标模闆(Cursor Template)四.滑鼠軌迹字元串分割SQL腳本實作(SQL Codes)五.補充說明(Addon)

(Figure7:sp_MSForEachDB效果圖)

更多sp_MSForEachDB和sp_MSforeachtable的運用,可以參考:

<a href="http://www.cnblogs.com/gaizai/archive/2013/05/07/3064489.html">SQL Server 遊标運用:檢視一個資料庫所有表大小資訊(Sizes of All Tables in a Database)</a>

<a href="http://www.cnblogs.com/gaizai/archive/2013/05/08/3066918.html">SQL Server 遊标運用:檢視所有資料庫所有表大小資訊(Sizes of All Tables in All Database)</a>

(二) 步驟四中處理SQL代碼可能性能不是最優的,因為就函數Get_StrArrayStrOfIndex的調用就已經非常頻繁的,如果一個PosSet字段的值非常多,你可以考慮用一個表值函數傳回一個表。