a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 111|回复: 1

[数据库] SQLServer字符串的截取

[复制链接]
发表于 2012-7-31 21:12:12 | 显示全部楼层 |阅读模式
公司日志系统变态,用户操作url记录在数据库中,我需要从一条信息中找到参数pid的值,而pid参数后面是否有参数未知,无奈只好自己写个函数处理。   数据库是M$的 SQL 2005- R+ h/ w! c9 k. z8 {. b
  Sql代码
# \2 o4 L) w, @/ x  SET ANSI_NULLS ON
) _0 d9 @- C) n* j4 z5 g( V  GO; E2 ]* V0 M! M* d
  SET QUOTED_IDENTIFIER ON6 z  C# _  T+ u% V' J
  GO3 J4 B% [. u9 S7 Y
  -- =============================================% c! t* J$ S* Y# X" [0 Q
  -- Author:
/ O/ Z9 P" M- t$ m' w, o8 E3 Z$ V  Snowolf
( Y, h; I7 \! F' F2 G  X" y  -- Create date: 2008-10-17
: c: L' D( L) @0 ~+ i( ?  -- Description:* U7 m3 k$ N! W  ^) {/ ]( s# ^6 D
  从URL中获取参数值
, M7 A  a0 R3 E+ F, J% x+ g  -- =============================================- f* S5 V2 D; Z" o3 [; H
  CREATE FUNCTION getParam(@url nvarchar(max),@param nvarchar(max))
7 S; K. J: z0 S6 N  RETURNS nvarchar(max)
1 b! C0 w6 M! R3 u# z! `! S$ ]  AS' ?3 p7 {/ x# q2 A; d
  BEGIN
, H& }# e3 K% m9 h* ^  declare
3 T; z& I* x8 o  \
0 M: A4 e9 K& n  @separator nvarchar(max),
回复

使用道具 举报

 楼主| 发表于 2012-7-31 21:12:13 | 显示全部楼层

SQLServer字符串的截取

</p>  -- 分隔符
: V8 j1 f# ^# E' H  @base nvarchar(max),
  B0 t+ p) _. O0 E' K6 y  @index int' u7 p# N6 o* A0 J. t3 A0 r; n
  set @separator='&'
7 Q% l' n/ K+ ~. o1 e  -- 截取参数名开头的字符串. h" j( x6 q9 J& I
  -- 'abc.do?pid=12124123&x=5'; L5 s  u" G( Q& T2 I
  -- 变为2 {" K: H+ R% @
  -- 'pid=12124123&x=5'5 `, }2 I# ]# m  h# `# e* }3 l
  set @base = substring(@url,charindex(@param,@url,0),400)
" ]0 E& [$ N9 e  _2 f8 F) P  -- 替换掉参数头
% ~6 K2 h; k3 v5 p  set @base = replace(@base,(@param+'='),'')
# X  m6 d( e3 o' M; g* u  -- 'pid=12124123&x=5'
# ]7 U! S. U0 K' b! {: A  -- 变为
8 x* N2 ~5 H0 x: ]  m- i0 f  -- '12124123&x=5'1 q/ B) l2 i: x- a. T" R  p5 T
  -- 基于上述结果取得分隔符位置
" l5 I1 b( Y2 w! J4 ]4 R  set @index = charindex(@separator,@base,0)
2 {, \; K6 O! K% Q& Q  -- 当分割符存在则替换&符号开始的全部信息6 s' J8 f+ s* k3 j8 u) \
  -- 当分割符不存在则直接返回$ A  T. k; J( Y5 B. _! L, A
  RETURN (case @index when 0 then @base else replace(@base,substring(@base,@index,400),'') end): H$ t: a  A% ?& E9 G# F- S* h
  END
3 V& E3 N* V% y* a9 v( f8 j  GO$ i) g  v8 f- j! c9 u: M
  至于,这个字符串该有多大,400个字符应该足够用了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-26 23:27 , Processed in 0.366819 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表