相关文章推荐
聪明的西红柿  ·  text - How to achieve ...·  1 年前    · 
淡定的铅笔  ·  C++ complex复数类用法详解·  1 年前    · 
无邪的柑橘  ·  if statement - How to ...·  1 年前    · 

SUBSTRING
返回字符、 binary text image 表达式的一部分。有关可与该函数一起使用的有效 Microsoft®      SQL      Server™ 数据类型的更多信息,请参见数据类型。

语法
SUBSTRING      (      expression      ,      start      ,      length      )

参数
expression

是字符串、二进制字符串、 text image 、列或包含列的表达式。不要使用包含聚合函数的表达式。

start

是一个整数,指定子串的开始位置。

length

是一个整数,指定子串的长度(要返回的字符数或字节数)。

substring()
——
任意位置取子串

left()
right()
——
左右两端取子串

ltrim()
rtrim()
——
截断空格,没有 trim()

charindex()
patindex()
——
查子串在母串中的位置,没有返回 0 。区别: patindex 支持通配符, charindex 不支持。

函数功效:
字符串截取函数,只限单字节字符使用(对于中文的截取时遇上奇数长度是会出现乱码,需另行处理),本函数可截取字符串指定范围内的字符。

应用范围:
标题、内容截取

函数格式:
string
substr ( string string, int start [, int length])
参数 1 :处理字符串
参数 2 :截取的起始位置(第一个字符是从 0 开始)
参数 3 :截取的字符数量
substr()
更多介绍可在 PHP 官方手册中查询(字符串处理函数库)

举例:
substr("ABCDEFG", 0);     //
返回: ABCDEFG ,截取所有字符
substr("ABCDEFG", 2);     //
返回: CDEFG ,截取从 C 开始之后所有字符
substr("ABCDEFG", 0, 3); //
返回: ABC ,截取从 A 开始 3 个字符
substr("ABCDEFG", 0, 100); //
返回: ABCDEFG 100 虽然超出预处理的字符串最长度,但不会影响返回结果,系统按预处理字符串最大数量返回。
substr("ABCDEFG", 0, -3); //
返回: EFG ,注意参数 -3 ,为负值时表示从尾部开始算起,字符串排列位置不变


1. 截取已知长度的函数


A. 截取从字符串左边开始 N 个字符

Declare @S1 varchar(100)
Select @S1='http://www.163.com'
Select Left(@S1,4)
------------------------------------
显示结果 : http

B. 截取从字符串右边开始 N 个字符 ( 例如取字符 www.163.com )

Declare @S1 varchar(100)
Select @S1='http://www.163.com'
Select right(@S1,11)
------------------------------------
显示结果 : www.163.com

C. 截取字符串中任意位置及长度 ( 例如取字符 www)

Declare @S1 varchar(100)
Select @S1='http://www.163.com'
Select SUBSTRING(@S1,8,3)
------------------------------------
显示结果 : www.163.com


以上例子皆是已知截取位置及长度 , 下面介绍未知位置的例子

2. 截取未知位置的函数


A. 截取指定字符串后的字符串 ( 例如截取 http:// 后面的字符串 )

方法一 :

Declare @S1 varchar(100)
Select @S1='http://www.163.com'
Select Substring(@S1,CHARINDEX('www',@S1)+1,Len(@S1))
/*
此处也可以这样写 :Select Substring(@S1,CHARINDEX('//',@S1)+2,Len(@S1))*/

------------------------------------
显示结果 : www.163.com


需要注意 :CHARINDEX 函数搜索字符串时 , 不区分大小写 , 因此 CHARINDEX('www',@S1) 也可以写成 CHARINDEX('WWW',@S1)

方法二 :( 与方法一类似 )

Declare @S1 varchar(100)
Select @S1='http://www.163.com'
Select Substring(@S1,PATINDEX('%www%',@S1)+1,Len(@S1))
--
此处也可以这样写 :Select Substring(@S1,PATINDEX('%//%',@S1)+2,Len(@S1))
------------------------------------
显示结果 : www.163.com

函数 PATINDEX CHARINDEX 区别在于 : 前者可以参数一些参数 , 增加查询的功能

方法三 :

Declare @S1 varchar(100)
Select @S1='http://www.163.com'
Select REPLACE(@S1,'http://','')
------------------------------------
显示结果 : www.163.com

利用字符替换函数 REPLACE, 将除需要显示字符串外的字符替换为空

方法四 :

Declare @S1 varchar(100)
Select @S1='http://www.163.com'
Select STUFF(@S1,CHARINDEX('http://',@S1),Len('http://'),'')
------------------------------------
显示结果 : www.163.com


函数 STUFF REPLACE 区别在于 : 前者可以指定替换范围 , 而后者则是全部范围内替换

B. 截取指定字符后的字符串 ( 例如截取 C:\Windows\test.txt 中文件名 )
A 不同的是 , 当搜索对象不是一个时 , 利用上面的方法只能搜索到第一个位置

方法一 :

Declare @S1 varchar(100)
Select @S1='C:\Windows\test.txt'
select right(@S1,charindex('\',REVERSE(@S1))-1)
-------------------------------------
显示结果 : text.txt


利用函数 REVERSE 获取需要截取的字符串长度

substr()

private void DDL_AreaBind()
{
conn = new SqlConnection(ConfigurationManager.ConnectionStrings["strcon"].ConnectionString);
string str = "0000";
cmd = new SqlCommand("select AreaID,Name=ltrim(Name) from Area where    right(AreaID,4) ='" + str + "'", conn);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(ds, "area");
this.ddl_area.DataSource = ds.Tables["area"].DefaultView;
this.ddl_area.DataTextField = "Name";
this.ddl_area.DataValueField = "AreaID";
this.ddl_area.DataBind();


cmd = new SqlCommand("select * from Area    ", conn);
cmd.CommandType = CommandType.Text;
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(ds, "city");
this.ddl_city.DataSource = ds.Tables["city"].DefaultView;
this.ddl_city.DataTextField = "Name";
this.ddl_city.DataValueField = "AreaID";
this.ddl_city.DataBind();
}

protected void ddl_area_SelectedIndexChanged(object sender, EventArgs e)
{
conn = new SqlConnection(ConfigurationManager.ConnectionStrings["strcon"].ConnectionString);
this.ddl_city.Enabled = true;
string str1="0000";
cmd = new SqlCommand("select AreaID,Name from Area where substring(AreaID,1,2)='" + this.ddl_area.SelectedValue.Substring(0,2)    + "' AND substring(AreaID,3,4) <> '0000' AND substring(AreaID,5,2)='00'    ", conn);
cmd.CommandType = CommandType.Text;
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds, "city");
this.ddl_city.DataSource = ds.Tables["city"].DefaultView;
this.ddl_city.DataTextField = "Name";
this.ddl_city.DataValueField = "AreaID";
this.ddl_city.DataBind();
}

最近项目中用到比较少见的 SQL 语句,分享一下:

查询祖先节点
select * from
目录表 _ 数据库 where ID<>-1 and datatype<>1 and datatype<>2 connect by prior FATHERID=ID start with ID=28 order by 目录级别 ,ID

查询子孙节点:
select * from
目录表 _ 数据库 where ID<>-1 and datatype<>1 and datatype<>2 connect by prior ID=FATHERID start with ID=28 order by 目录级别 ,ID

jquery批量接受 jquery获取多个子元素

本文实例讲述了Jquery实现获取子元素的方法。分享给大家供大家参考,具体如下:Jquery获取子元素的方法有2种,分别是children()方法和find()方法。下面我们分别来使用这两种方法,看看它们有何差异。1.children()方法:获取该元素下的直接子集元素2.find()方法:获取该元素下的所有子集元素分别以以下HTML代码为例:• list1 • list1-1 • list1-2

javascript api 接口 js的接口

接口:提供一种说明一个对象应该有哪些方法的手段 JavaScript中有三种方式实现接口:(1)注释描述接口(2)属性检测接口(3)鸭式辨型接口 1、注释描述接口:不推荐优点:易于实现,不需要额外的类或函数。缺点:纯文档约束,程序不能检查实现接口的对象是否实现了所有接口方法1 /** 2 * interface Composite{ 3 * functi

document.getElementById(“id”);通过这种方法可以获得这个id名的标签对象 document.getElementsByTagName(“标签名”)通过这种方法可以获得标签名的标签对象。注意:这个时候获得的是数组形式的 document.body:获得body这个对象 创建标签对象:
jquery选中所有非input jquery选择器find

定义和用法find() 方法获得当前元素集合中每个元素的后代,通过选择器、jQuery 对象或元素来筛选。<!DOCTYPE html> <script type="text/javascript" src="/jquery/jquery.js"></script> </head>