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();

}

替换用法:

在更新合同人员数据的时候,我发现编码是没规律的,如zhy001、cx001,而我要做的却是将后面的001全部去掉,那怎么办呢,substring从后三位截取,是可以,但是第二个参数怎么弄?第二个参数是不固定位置,有的在4、有的在5.所以,理所当然联想到我们平时用的Ctrl+F功能:

update 表名 set 字段名=replace(cast(字段名 as varchar(8000)),'001','')

把001编号用空来替换,一次性搞定~

substring详细用法,截取不行就用替换的更多相关文章

  1. sqlserver的substring详细用法

    SQL 中的 substring 函数是用来截取一个栏位资料中的其中一部分. 例如,我们需要将字符串'abdcsef'中的‘abd’给提取出来,则可用substring 来实现: select sub ...

  2. Mysql字符串截取函数SUBSTRING的用法说明

    感觉上MySQL的字符串函数截取字符,比用程序截取(如PHP或JAVA)来得强大,所以在这里做一个记录,希望对大家有用. 函数: 1.从左开始截取字符串 left(str, length) 说明:le ...

  3. JAVA中字符串函数subString的用法小结

    本篇文章主要是对JAVA中字符串函数subString的用法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 String str; str=str.substring(int begi ...

  4. IndexOf、LastIndexOf、Substring的用法

     String.IndexOf String.IndexOf 方法 (Char, Int32, Int32)报告指定字符在此实例中的第一个匹配项的索引.搜索从指定字符位置开始,并检查指定数量的字符位置 ...

  5. IFRAM的详细用法

    IFRAM的详细用法:   IFRAM的详细用法:  <IFRAME>用于设置文本或图形的浮动图文框或容器. BORDER <IFRAME BORDER="3"& ...

  6. 【转】java.util.vector中的vector的详细用法

    [转]java.util.vector中的vector的详细用法 ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.uti ...

  7. js中substring/substr和C#中Substring的用法

    一:在js中截取字符串的方法有两个:substring和substr 1.方法: substring(int stringIndex,[int endIndex]) 截取从索引为stringIndex ...

  8. heckboxlist详细用法、checkboxlist用法、checkboxlist

    heckboxlist详细用法.checkboxlist用法.checkboxlist for (int i = 0; i < CheckBoxList1.Items.Count; i++) { ...

  9. Android开发中Context类的作用以及Context的详细用法

    Android中Context的作用以及Context的详细用法 本文我们一起来探讨一下关于Android中Context的作用以及Context的详细用法,这对我们学习Android的资源访问有很大 ...

随机推荐

  1. Node.js——body方式提交数据

    引入核心模块 http,利用其 api(http.createServer) 返回一个 http.server 实例,这个实例是继承于net.Server,net.Server 也是通过net.cre ...

  2. Ryubook_1_switch_hub_部署执行

    一.环境: mininet.ovs.Ryu. 二.实验过程: 1.搭建拓扑: 执行sudo mn --topo single,3 --mac --switch ovsk --controller re ...

  3. make、makefile

    http://blog.csdn.net/wed110/article/details/34853475 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows ...

  4. sql 触发器 针对一张表数据写入 另一张表 的增删改

    ALTER TRIGGER [dbo].[tri_test2] ON [dbo].[student] for INSERT,DELETE,UPDATEAS BEGIN if not exists (s ...

  5. [Luogu] P1441 砝码称重

    题目描述 现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0). 题目分析 因为读错题WAWA大哭. 先dfs枚举选的砝码,满足条件时进行d ...

  6. 安装php扩展(以swoole)为例

    一.下载swoole到/usr/local/src目录下,操作 git clone https://gitee.com/swoole/swoole.git; 二.cd swoole,phpize(如果 ...

  7. Python之机器学习-sklearn生成随机数据

    sklearn-生成随机数据 import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotli ...

  8. LeetCode(61) Rotate List

    题目 Given a list, rotate the list to the right by k places, where k is non-negative. For example: Giv ...

  9. LeetCode(53) Maximum Subarray

    题目 Find the contiguous subarray within an array (containing at least one number) which has the large ...

  10. LeetCode(30) Substring with Concatenation of All Words

    题目 You are given a string, s, and a list of words, words, that are all of the same length. Find all ...