a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 108|回复: 1

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

[复制链接]
发表于 2012-7-31 21:12:12 | 显示全部楼层 |阅读模式
公司日志系统变态,用户操作url记录在数据库中,我需要从一条信息中找到参数pid的值,而pid参数后面是否有参数未知,无奈只好自己写个函数处理。   数据库是M$的 SQL 20057 v; N" L( p1 H7 K! g2 s
  Sql代码
# H, b. ?# E* H; V; l  SET ANSI_NULLS ON
. e4 }6 {0 t- u* ~1 H- E  GO
+ O" K7 Q) _0 [. p5 U1 S& o  SET QUOTED_IDENTIFIER ON, W: C4 [3 ~' f4 }) s: j
  GO
9 C. f! |+ a/ h) Z7 g  -- =============================================
' i/ _3 s! L4 a1 g' {$ E- ^  -- Author:
( C( i8 q; E9 T! Q# O1 C  Snowolf( P% n6 Z- ^6 Z. u, n
  -- Create date: 2008-10-17
  G* ~% G; ?' c' H$ c  -- Description:, K; W/ F7 H2 j
  从URL中获取参数值' }4 f- t% R1 O
  -- =============================================. R, U5 n3 H1 o5 s
  CREATE FUNCTION getParam(@url nvarchar(max),@param nvarchar(max))
. `* \% c% j2 m" w% _9 l$ i  RETURNS nvarchar(max)
* P/ Q- x; b. G. e* H) p  AS7 f) C. O( d/ u( n3 Z0 M7 P$ i2 c
  BEGIN
! v* ], W  {4 D3 l( J  declare
2 `- f: g( r2 d1 @$ e# ]+ E6 H* N, X' @+ D  {2 A$ Y/ J  s
  @separator nvarchar(max),
回复

使用道具 举报

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

SQLServer字符串的截取

</p>  -- 分隔符' L3 S( i, S2 o" R8 r
  @base nvarchar(max),
3 L. ~0 C6 m" ^6 Y( s! T9 m  @index int2 p. u/ h2 C$ g! g- ~( T
  set @separator='&'
4 E6 @6 Z) \, `! k* _  -- 截取参数名开头的字符串
+ R. ^* A8 d" H  -- 'abc.do?pid=12124123&x=5'
" X9 u0 h. ?/ I0 ]" x7 D& |% u  -- 变为
) T8 F" v: T- U  }  -- 'pid=12124123&x=5'
' e+ e: O. b5 u% E$ a0 r  set @base = substring(@url,charindex(@param,@url,0),400)
2 C; @( s; |+ ]4 M( w2 b  -- 替换掉参数头- W8 w* \( [1 U# ?. P
  set @base = replace(@base,(@param+'='),'')5 R' e" v7 i5 ?8 P) x7 }) o
  -- 'pid=12124123&x=5'
) z, j6 ~  u! ~  A* m2 Y0 J! k$ T  -- 变为/ Z( r# y- P, l; J- D( ~5 Z. Z
  -- '12124123&x=5'% X# p' ]% _+ J2 v
  -- 基于上述结果取得分隔符位置% [5 {$ X3 ]7 K3 L/ c; M$ L& U( u
  set @index = charindex(@separator,@base,0)
6 b. J! S7 m  U; i2 ^6 T  -- 当分割符存在则替换&符号开始的全部信息
+ W8 L# l* L! S- L  -- 当分割符不存在则直接返回
$ K! `! M( ]0 ?' ~# W  RETURN (case @index when 0 then @base else replace(@base,substring(@base,@index,400),'') end)
( l9 ~6 x* f. y: V% X  END; l6 G4 ^+ P0 r! O. w
  GO% h5 |( J0 u4 J
  至于,这个字符串该有多大,400个字符应该足够用了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-18 05:54 , Processed in 0.303122 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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