標籤:style blog color 使用 os 資料
這一篇文章主要總結開發過程中經常使用到的字串處理函數,它們在處理字串時非常有用,那麼,總結起來有以下函數。
1,字串串聯運算子
2,SUBSTRING提取子串
3,LEFT和RIGHT
4,LEN和DATALENGTH
5,CHARINDEX函數
6,PATINDEX函數
7,REPLACE替換
8,REPLICATE複製字串
9,STUFF函數
10,UPPER和LOWER函數
11,RTRIM和LTRIM函數
字串串聯運算子
由於業務需要,有的時候我們需要將兩個欄位(列)組合起來,中間加上分隔字元,然後輸出。這時我們就會用到字串串聯運算子[+]號。例如,我們對Employees表中的firstname,空格和lastname列串聯起來,產生完整的姓名fullname列。
SQL查詢代碼:
-- 設定資料庫上下文USE TSQLFundamentals2008;GO-- fullname是串聯運算子串聯後的結果SELECT empid,firstname,lastname,firstname+N‘ ‘+lastname AS fullname FROM hr.Employees
查詢結果:
需要注意的是,ANSI SQL規定對NULL值執行串聯運算後也會產生NULL值的結果,這是SQL Server的預設行為。當然,可以通過將名為CONCAT_NULL_YIELDS_NULL的會話選項設定為OFF來改變SQL Server的預設處理方式,但是要記得,在處理完成後要設定回原來的ON狀態。
SUBSTRING提取子串
SUBSTRING函數用於從字串中提取子串。例如,以下代碼返回字串‘abc’.
SQL查詢代碼:
SELECT SUBSTRING(‘abcde‘,1,3);
查詢結果:
注意:1,一般開始位置是從1開始的。
2,如果第二個參數和第三個參數的和超過了整個字串的長度,則函數會返回從起始位置開始,直到字串結尾的整個字串而不會引起錯誤。當需要返回從某個位置開始,直到結尾的所有內容時,可以指定一個非常大的值或者表示整個字串的長度的值就可以。
LEFT和RIGHT
LEFT和RIGHT函數是SUBSTRING的簡寫形式,它們分別返回輸入字串從左或右邊開始的指定個數的字元。例如,以下代碼返回字元‘cde‘。
SQL查詢代碼:
SELECT RIGHT(‘abcde‘,3);
查詢結果跟SUBSTRING一樣。LEFT的使用同RIGHT。
LEN和DATALENGTH
LEN函數返回輸入字串的字元數。而DATALENGTH函數返回輸入字串的位元組數。需要注意它們的區別。LEN的文法形式為:LEN(string),DATALENGTH的文法形式為:DATALENGTH(string)
例如,以下代碼返回字串的字元數5
SQL查詢代碼:
SELECT LEN(N‘abcde‘);
查詢結果輸出:5
而如果使用DATALENGTH函數則輸出:10。
CHARINDEX函數
CHARINDEX函數返回字串中某個子串第一次出現的起始位置。它的文法形式為:CHARINDEX(substring,string[,start_pos]),該函數在第二個參數(string)中搜尋第一個參數(substring),並返回其起始位置,可以選擇性地指定第三個參數(start_pos),以便告訴這個函數從字串的什麼位置開始搜尋,如果不指定的話,則從字串的第一個字串開始搜尋。如果在string中找不到substring,則函數返回0。
例如,以下代碼在‘trac mcgrady‘中尋找第一個空格的位置,結果將返回5
SQL查詢代碼:
SELECT CHARINDEX(‘ ‘,‘trac mcgrady‘);
PATINDEX函數
PATINDEX函數返回字串中某個模式第一次出現的起始位置。它的文法形式為:PATINDEX(pattern,string)
例如,我們需要在字串中找到第一次出現數位位置。
SQL查詢代碼:
SELECT PATINDEX(‘%[0-9]%‘,‘abcd123efgh‘);
查詢結果:5
REPLACE替換
REPLACE函數將字串中出現的某個子串替換為另一個字串。它的文法形式為:REPLACE(string,substring1,substring2),該函數會將string中出現的所有substring1替換為substring2。
例如,以下代碼將輸入字串中的所有連字號(-)替換為冒號(:)
SQL查詢代碼:
SELECT REPLACE(‘1-a 2-b‘,‘-‘,‘:‘);
查詢結果:1:a 2:b
REPLICATE複製字串
REPLICATE函數以指定的次數複製字串值。它的文法形式為:REPLICATE(string,n)
例如,以下代碼將字串‘abc’複製三次,返回字串‘abcabcabc‘。
SQL查詢代碼:
SELECT REPLICATE(‘abc‘,3);
查詢結果:‘abcabcabc‘
下面這個例子顯示了REPLICATE函數,以及RIGHT函數和字串串聯的用法。以下對Production.Suppliers的查詢為每個供應商的整數ID產生一個10位元字的字串表示(不足10位時,前面補‘0’)
SQL查詢代碼:
-- 設定資料庫上下文USE TSQLFundamentals2008;GOSELECT supplierid, RIGHT(REPLICATE(‘0‘,9)+CAST(supplierid AS VARCHAR(10)),10) AS strsupplieridFROM Production.SuppliersORDER BY supplierid
查詢結果:
STUFF函數
STUFF函數可以先刪除字串中的一個子串,然後再插入一個新的子串作為替換。它的文法形式為:STUFF(string,pos,delete_length,insertstring)
例如,以下代碼對字串‘xyz’進行處理,先刪除其中的第二個字元,再插入字串‘abc‘.
SQL查詢代碼:
SELECT STUFF(‘xyz‘,2,1,‘abc‘);
查詢結果:‘xabcz‘
UPPER和LOWER函數
UPPER和LOWER函數用於將輸入字串中的所有字元都轉換為大寫或小寫形式。它們的文法形式為:UPPER(string),LOWER(string)。
例如,第一個函數返回‘TRAC MCGRADY‘,第二個函數返回‘trac mcgrady‘。
-- 返回‘TRAC MCGRADY‘SELECT UPPER(‘trac mcgrady‘);-- 返回‘trac mcgrady’SELECT LOWER(‘Trac Mcgrady‘);
RTRIM和LTRIM函數
RTRIM和LTRIM函數用於刪除輸入字串的尾部空格和前置空格。它們的文法形式為:RTRIM(string),LTRIM(string)。如果既想刪除前置空格,也想刪除尾部空格,則可以將一個函數的結果作為另一個函數的輸入來使用。例如,以下代碼會刪除輸入字串的前置空格和尾部空格,最後返回‘abc’
SQL查詢代碼:
-- 返回‘abc‘SELECT RTRIM(LTRIM(‘ abc ‘));