程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL 截取字符串運用代碼

SQL 截取字符串運用代碼

編輯:MSSQL

SQL 截取字符串運用代碼。本站提示廣大學習愛好者:(SQL 截取字符串運用代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL 截取字符串運用代碼正文


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();
}
dows" ,但不克不及婚配 "Windows 3.1" 中的 "Windows"。預查不用耗字符,也就是說,在一個婚配產生後,在最初一次婚配以後立刻開端下一次婚配的搜刮,而不是從包括預查的字符以後開端。 (?!pattern) 負向預查,在任何不婚配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串開端處婚配查找字符串。這是一個非獲得婚配,也就是說,該婚配不須要獲得供今後應用。例如'Windows (?!95|98|NT|2000)' 能婚配 "Windows 3.1" 中的 "Windows",但不克不及婚配 "Windows 2000" 中的 "Windows"。預查不用耗字符,也就是說,在一個婚配產生後,在最初一次婚配以後立刻開端下一次婚配的搜刮,而不是從包括預查的字符以後開端 x|y 婚配 xy。例如,'z|food' 能婚配 "z" 或 "food"。'(z|f)ood' 則婚配 "zood" 或 "food"。 [xyz] 字符聚集。婚配所包括的隨意率性一個字符。例如, '[abc]' 可以婚配 "plain" 中的 'a'。 [^xyz] 負值字符聚集。婚配未包括的隨意率性字符。例如, '[^abc]' 可以婚配 "plain" 中的'p'。 [a-z] 字符規模。婚配指定規模內的隨意率性字符。例如,'[a-z]' 可以婚配 'a' 到 'z' 規模內的隨意率性小寫字母字符。 [^a-z] 負值字符規模。婚配任何不在指定規模內的隨意率性字符。例如,'[^a-z]' 可以婚配任何不在 'a' 到 'z' 規模內的隨意率性字符。 \b 婚配一個單詞界限,也就是指單詞和空格間的地位。例如, 'er\b' 可以婚配"never" 中的 'er',但不克不及婚配 "verb" 中的 'er'。 \B 婚配非單詞界限。'er\B' 能婚配 "verb" 中的 'er',但不克不及婚配 "never" 中的 'er'。 \cx 婚配由x指明的掌握字符。例如, \cM 婚配一個 Control-M 或回車符。 x 的值必需為 A-Z 或 a-z 之一。不然,將 c 視為一個原義的 'c' 字符。 \d 婚配一個數字字符。等價於 [0-9]。 \D 婚配一個非數字字符。等價於 [^0-9]。 \f 婚配一個換頁符。等價於 \x0c 和 \cL。 \n 婚配一個換行符。等價於 \x0a 和 \cJ。 \r 婚配一個回車符。等價於 \x0d 和 \cM。 \s 婚配任何空白字符,包含空格、制表符、換頁符等等。等價於 [ \f\n\r\t\v]。 \S 婚配任何非空白字符。等價於 [^ \f\n\r\t\v]。 \t 婚配一個制表符。等價於 \x09 和 \cI。 \v 婚配一個垂直制表符。等價於 \x0b 和 \cK。 \w 婚配包含下劃線的任何單詞字符。等價於'[A-Za-z0-9_]'。 \W 婚配任何非單詞字符。等價於 '[^A-Za-z0-9_]'。 \xn 婚配 n,個中 n 為十六進制本義值。十六進制本義值必需為肯定的兩個數字長。例如, '\x41' 婚配 "A"。'\x041' 則等價於 '\x04' & "1"。正則表達式中可使用 ASCII 編碼。. \num 婚配 num,個中 num 是一個正整數。對所獲得的婚配的援用。例如,'(.)\1' 婚配兩個持續的雷同字符。 \n 標識一個八進制本義值或一個後向援用。假如 \n 之前至多 n 個獲得的子表達式,則 n 為後向援用。不然,假如 n 為八進制數字 (0-7),則 n 為一個八進制本義值。 \nm 標識一個八進制本義值或一個後向援用。假如 \nm 之前至多有is preceded by at least nm 個獲得得子表達式,則 nm 為後向援用。假如 \nm 之前至多有 n 個獲得,則 n 為一個後跟文字 m 的後向援用。假如後面的前提都不知足,若  nm 均為八進制數字 (0-7),則 \nm 將婚配八進制本義值 nm。 \nml 假如 n 為八進制數字 (0-3),且 ml 均為八進制數字 (0-7),則婚配八進制本義值 nml。 \un 婚配 n,個中 n 是一個用四個十六進制數字表現的 Unicode 字符。例如, \u00A9 婚配版權符號 (?)。
例子1:.+ 詳解:這是最簡略的一行全體婚配,也就是獲得的內容是一整行的內容!由於"."是除換行(\n)外的一切字符集,而"+"又代表至多一個的意思,合起來就是具有至多一個除換行外的一切字符集,而行與行之間是以換行符(\r\n)停止簡隔的,所以這句正則代表了一行,因為換行符中包括了\r這個"."元字符所具有的字符,所以就算行動空也是婚配的,假如換成[^\r\n]+的話就空行就不婚配了!

例子2:<.+?> 這個婚配HTML元素的正則,就是以<為開頭,中間含有至少一個非換行字符直到出現結束符>為止!正則外面的?長短貪心形式,概況請看正則解釋!也就是碰到第一個相符的婚配就停滯搜刮!假如沒加,就會一向搜刮到最初一個>為止!假如沒加"?",以貪心形式停止搜刮成果:

例子3:<tr.*?>[\s\S]*?<\/tr> 這個正則婚配表格中的tr行!而且是跨換行停止婚配!起首是對tr開首停止婚配,由於有些tr開首有參數,所以加上.*?對參數部門停止婚配,假如沒有參數,則.*?為空![\s\S]是對包含換行符在內的義務字符停止婚配,由於\s婚配空白字符,而\S又與它相反,兩個合在一個字符聚集"[]"中就代表了一切的電腦字符!"*"代表0或無窮個,合起來就是婚配一切字符串,"?"長短貪心形式,也就是找到第一個<\/tr>以後就停滯搜刮,例子2有相干引見