首页 | 博客群 | 公社 | 专栏 | 论坛 | 图片 | 资讯 | 注册 | 帮助 | 博客联播 | 随机访问
[原创]关于《论Asp与XML的关系》的FAQ- -| 回首页 | 2004年索引 | - -[原创]说给初学者听:注意对服务器技术的掌握

SQL Server用户自定义函数:Split

                                      

大家都知道在VBScript里面有一个很方便的函数:split。但是在SQL Server里面却没有这样的函数。今天我因某个应用的需要,顺手写了一个。

说明:

1、这个函数是直接用","作为分隔符的。当然你可以把它改成以别的字符为分隔符,或者让用户自己来输入分隔符(把分隔符作为一个参数)。

2、这个函数里面,假设要拆分的字符串是由一组整型数加上","组成的。当然这是我在这个应用中的情况。你可以根据需要改成其他数据类型,或者把数据类型作为一个参数让用户输入。

随便写写,没有作太多讲究,期待有心人的改进:)

/*****************************************************************************
* Name: T-SQL Split算法实现(整型)
* Author: Xinsoft
* Create Date: 2004-12-01
* Version: V1.0.00
*****************************************************************************/
CREATE Function Func_SplitInt
(
     @InputStr varchar(250)
)

Returns @Func_SplitInt table
(
     val int
)

as
Begin

     Declare @str varchar(250)
     Declare @substr varchar(250)
     Declare @iLen int
     Declare @iStart int
     set @str=RTrim(Ltrim(@InputStr))

     set @iStart=CHARINDEX(  ',' , @str )
     set @iLen=Len( @str )
     IF @iStart>0
     Begin
           set @substr=substring( @str , 1 , @iStart-1 )
           set @str=substring( @str , @iStart+1 , @iLen-@iStart )
     End
     Else
     Begin
           set @substr=@str
           set @str=''
     End

     set @substr=RTRIM( LTRIM( @substr ) )
     insert @Func_SplitInt select id=cast( @substr as int )



     While Len( @str )>0
     Begin
     ---------------- Loop Begin ---------------

     set @iStart=CHARINDEX(  ',' , @str )
     set @iLen=Len( @str )
     IF @iStart>0
     Begin
           set @substr=substring( @str , 1 , @iStart-1 )
           set @str=substring( @str , @iStart+1 , @iLen-@iStart )
     End
     Else
     Begin
           set @substr=@str
           set @str=''
     End

     set @substr=RTRIM( LTRIM( @substr ) )
     insert @Func_SplitInt select id=cast( @substr as int )


     ---------------- Loop End ----------------

     End


Return
End


 

【作者: Xinsoft】【访问统计:】【2004年12月13日 星期一 17:51】【注册】【打印

搜索

Google

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=378587

回复

- 评论人:半滴水   2005-03-25 17:47:39   

do while not rs2.eof

后面为什么没有LOOP

if not rs2.bof and not rs2.eof then

后面为什么没有ENE IF

- 评论人:Calla Lily   2005-02-15 13:53:13   

我对ASP不太了解,但由于工作原因不得不涉足,我想在一条新闻中显示多张图片,我的思路是在数据库的news表中加入一个叫img的列,里面保存图片名称,多个图片名称之间用半角“,”分隔,然后在显示新闻的news.asp中包含显示图片的img.asp,这两个asp源代码分别如下:

news.asp的源代码

<html>
<%dim db2,conn2,id,labey
labey=request.QueryString("labey")
id=request.QueryString("id")
set db2=server.CreateObject("adodb.connection")
conn2="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("xjdb.mdb")
db2.open conn2
dim rs2,sql2
set rs2=server.createobject("adodb.recordset")
sql2="select * from news where id="&id
rs2.open sql2,db2,1,1
if not rs2.bof and not rs2.eof then
do while not rs2.eof
dim keyword,img
keyword=rs2("keyword")
img=rs2("img")
session.timeout=60
session("title")=rs2("title")
session("id")=id
session("labey")=labey
%>
<head><link rel="stylesheet" type="text/css" href="css.css"><title>实验</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><style type="text/css">
<!--
body {
margin-top: 0px;
}
td {
font-size: 10pt;
line-height: normal;
}
.unnamed1 {
line-height: 18pt;
}
.style2 {color: #000000}
.unnamed2 {
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-style: outset;
border-bottom-style: outset;
border-top-color: #00BFBF;
border-right-color: #00BFBF;
border-bottom-color: #00BFBF;
border-left-color: #00BFBF;
}
.unnamed3 {
line-height: 19pt;
}
-->
   </style>

</head>
<body bgcolor="#ffff99" bottommargin="0">

       <%
dim imgurl
imgurl=rs2("imgurl")
if imgurl<>"" then
%>
       <img src="../news_img/<%=rs2("imgurl")%>">
       <%end if%>
       <!--#include virtual="saveinc/img.asp" -->


</body>
</html>

img.asp的源代码:

<%
if img<>"" then
dim img1
img1=split(img,",")'会得到以半角“,”分隔的字符串
for each aa in img1

<img src="../news_img/&aa">
end if
%>

我尝试了一下,但有错误,望大侠指点!小女子先谢过了

验证码:   
评论内容: