sql常用函式詳解(一)——字串擷取
1.substring函式——擷取字串
SUBSTRING ( expression, start, length )
expression——字串、二進位制字串、文字、影像、列或包含列的表示式。請勿使用包含聚合函式的表示式。
start——整數或可以隱式轉換為int 的表示式,指定子字串的開始位置。
length——整數或可以隱式轉換為 int 的表示式,指定子字串的長度
left(field,length) ——函式返回field最左邊的length個長度的字串
right(field,length)——函式返回field最右邊的length個長度的字串
eg1:取定長定位置的字串
select substring('abdcsef',1,3)
result: abd
2.CHARINDEX函式——返回字元或者字串在另一個字串中的起始位置
CHARINDEX ( expression1 , expression2 [ , start_location ] ) —— CHARINDEX函式返回一個整數,返回的整數是要找的字串在被找的字串中的位置。Expression1是要到expression2中尋找的字元中,start_location是CHARINDEX函式開始在expression2中找expression1的位置。
CHARINDEX('SQL', 'Microsoft SQL Server')
這個函式命令將返回在“Microsoft SQL Server”中“SQL”的起始位置,在這個例子中,CHARINDEX函式將返回“S”在“Microsoft SQL Server”中的位置11。
eg1:取不定長不同位置的字串
我們只想要得到'roomno'中的房間號,發現起始字元位置並不是固定的,而且,我們需要的房間號長度也不固定。
此時,我們可以運用‘charindex’這個函式就可以輕鬆搞定,它是用來定位某個特定字元在該字串中的位置,即該函式
得到的結果是一個用來表示某個特定字元位置的數字。執行如下程式碼:
select
room_stand=substring(roomno,charindex('元',roomno)+1,charindex('室',roomno)-charindex('元',roomno)-1)
from PROPERTY_room
where roomno like '%單元%室%'
result:
3.STUFF函式——刪除指定長度的字元,並在指定的起點處插入另一組字元。
STUFF ( character_expression , start , length ,character_expression )
SELECT STUFF('abcde', 2, 3, '123')
result: a123e
4.patindex函式——返回pattern字串在表示式expression裡第一次出現的位置,起始值從1開始算。
1. PATINDEX ( '%pattern%' , expression )——'%pattern%'的用法類似於 like '%pattern%'的用法,也就是模糊查詢其pattern字串是否是expression找到,找到並返回其第一次出現的位置。
eg1:
select patindex('%abb%','abcaabbeeabb')
結果5,也就是abb第一次出現的位置。
2.PATINDEX ( '%pattern' , expression )——'%pattern' 類似於 like '%pattern'的用法,前面用模糊查詢,也就是查詢pattern的結束所在expression的位置,也就是從後面匹配起查詢。
eg2:
select patindex('%abb','abcaabbeeabb')
返回10,也就是abb在後面第一次出現的位置。
select patindex('%abb','abcaabbeeabbr')
返回0,後面的第一個字母r和abb不匹配,所以返回0
3.PATINDEX ( 'pattern%' , expression )——這就相當於精確匹配查詢,也就是pattern,expression完全相等。
eg3:
select patindex('abb%','abbcaabbeeabb')
返回1,也就相當於起始值
select patindex('abb%','arbbcaabbeeabb')
返回0,開頭找不到就返回0,後面無論有多少都不管。
4.PATINDEX ( 'pattern' , expression )——這就相當於精確匹配查詢,也就是pattern,expression完全相等。
select patindex('abb','abb')
返回1,完全相等
select patindex('abb','abbr')
返回0,不完全相等
5. patindex('%[pattern]%','ddabcaabbeeabbr'),
patindex('%[^pattern]%','ddabcaabbeeabbr')
在此先說[]的用法,[]是指定某些特殊的字元。[^]除[]之外的字串,[]這其中的每一個
如:
Symbol Meaning
LIKE '5[%]' 5%
LIKE '[_]n' _n
LIKE '[a-cdf]' a, b, c, d, or f
LIKE '[-acdf]' -, a, c, d, or f
LIKE '[ [ ]' [
LIKE ']' ]
LIKE 'abc[_]d%' abc_d and abc_de
LIKE 'abc[def]' abcd, abce, and abcf
如:
select patindex('%[d]%','rcrdsddddaadadffdr')
返回4,[]中d在字串rcrdsddddaadadffdr的第一次出現的位置。
select patindex('%[cd]%','rcrdsdddrdaadadffdr')
返回2,[]中c,d在其中一個的位置,返回最先出現的這個位置,c在此字串裡第一次出現位置是2,而d是4,結果取最先的那個。
select patindex('%[sd]%','rcrdsdddrdaadadffdr')
返回4,[]中c,d在其中一個的位置,返回最先出現的這個位置,s在此字串裡第一次出現位置是5,而d是4,結果取最先的那個。
select patindex('%[^r]%','rrrdsdddrdaadadffdr')
返回4,除[]中的字串的匹配字元,第一次出現d不在[^r]裡,所以就找到第一次這位。
select patindex('%[^rd]%','rrrdsdddrdaadadffdr')
返回5,除[]中的字串的匹配字元,第一次出現s不在[^rd]裡,所以就找到第一次這位。
select patindex('%[^rsd]%','rrrdsdddrdaadadffdr')
返回11,除[]中的字串的匹配字元,第一次出現a不在[^rsd]裡,所以就找到第一次這位。
eg:去除括號及括號內內容(批量化處理)
--> 測試資料:#
if object_id('tempdb.dbo.#') is not null drop table #新建臨時表
create table #(col varchar(46))
insert into #
select '重慶唯遠實業有限公司(2009年01月05日)' union all
select '江蘇蘇美達船舶工程有限公司(2009年01月05日)' union all
select '上海啟門機電有限公司(2009年01月04日)' union all
select '小洋人生物乳業集團有限公司(2009年01月04日)' union all
select '瀋陽鼎冷機電裝置有限公司(2009年01月04日)' union all
select '嘉柏(中國)國際貨運代理有限公司(2008年12月31日)' union all
select '廣州寶潔有限公司(2008年12月31日)' union all
select '煙臺華科食品有限公司(2008年12月31日)' union all
select '艾來得機械(上海)有限公司(2008年12月31日)' union all
select '上海曉舟船舶配件有限公司(2008年12月31日)' union all
select '上海力弘包裝器材有限公司(2008年12月31日)'
/*
------------------------------
重慶唯遠實業有限公司
江蘇蘇美達船舶工程有限公司
上海啟門機電有限公司
小洋人生物乳業集團有限公司
瀋陽鼎冷機電裝置有限公司
嘉柏(中國)國際貨運代理有限公司
廣州寶潔有限公司
煙臺華科食品有限公司
艾來得機械(上海)有限公司
上海曉舟船舶配件有限公司
上海力弘包裝器材有限公司
*/
解決方案一:
select reverse(stuff(reverse(col), 1, charindex('(', reverse(col)), '')) from #
解決方案二:
update tb
set col = reverse(substring(reverse(col) ,charindex('(',reverse(col)) + 1 , len(col)))
select * from tb
解決方案三:
select
left(name,patindex('%([0-9][0-9][0-9][0-9]年%',name)-1) as name from [tb]
解決方案四:
select left(col,len(col) - 13) from tb
相關文章
- MySQL 字串函式:字串擷取MySql字串函式
- SQL中常用的字串LEFT函式和RIGHT函式詳解!SQL字串函式
- jQuery字串擷取詳解jQuery字串
- PHP 查詢、擷取字串函式詳解PHP字串函式
- Linux下的字串擷取詳解Linux字串
- MySQL 字串擷取相關函式總結MySql字串函式
- Javascript之字串擷取函式slice()、substring()、substr()JavaScript字串函式
- Hue-hive sql常用函式詳解HiveSQL函式
- C#常用字串擷取C#字串
- python函式教程:Python 字串操作(string替換、擷取等)Python函式字串
- 字串擷取字串
- substr擷取函式 筆記函式筆記
- mysql常用函式詳解MySql函式
- [提問交流]分享一個擷取字串的函式字串函式
- SQL中的常用的字串處理函式大全SQL字串函式
- T-SQL——函式——字串操作函式SQL函式字串
- 詳解SQL操作的視窗函式SQL函式
- SQL Server常用函式整理SQLServer函式
- 總結常用的字串函式字串函式
- 字串比較的常用函式字串函式
- js正規表示式常用函式詳解(續)JS函式
- JS字串擷取函式slice(),substring(),substr()的用法 區別split()後期遇到補充JS字串函式
- php 擷取中英文混合字串PHP字串
- JavaScript 擷取指定指定區間字串JavaScript字串
- Shell中的字串擷取介紹字串
- shell 使用陣列及字串擷取陣列字串
- Swift 4.0 字串擷取,拼接,字串富文字顯示Swift字串
- PHP 每日一函式 — 字串函式 crypt ()PHP函式字串
- PHP 每日一函式 — 字串函式 chr ()PHP函式字串
- PHP 每日一函式 — 字串函式 addslashes ()PHP函式字串
- PHP 每日一函式 — 字串函式 addcslashes ()PHP函式字串
- MySQL函式學習(一)-----字串函式MySql函式字串
- OpenCV計算機視覺學習(1)——影像基本操作(影像視訊讀取,ROI區域擷取,常用cv函式解釋)OpenCV計算機視覺函式
- Linux最常見的4個擷取命令詳解!Linux
- MySQl 擷取函式 left(),right(),substring(),substring_index() 的用法MySql函式Index
- 字串擷取 slice,substr,substring 的區別字串
- T-SQL——自定義函式解析JSON字串SQL函式JSON字串
- 字串函式學習一字串函式