天天看点

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字段的值非常多,你可以考虑用一个表值函数返回一个表。