尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
字符串函數可以解析、替換、操縱字符類型的值。在處理字符數據的同時,最大的問題在於如何可靠地獲取出有用的信息。在很多字符串函數中可以標識和解析字符串(一個大字符型值的一部分)。其實我們幾乎每天都在做這種事,閱讀文件、獲取發票或者書面材料上的信息時,就會本能地標識、分離出對自己有用的信息部分。這個過程對於人來來說很簡單但是對於電腦來說很難,即便是處理不太複雜的文字段相對來說也是很困難的。這些函數包含幾乎所有必需的步驟,而挑戰在於如何找出最簡單、最高效的方法。
ASCII()、CHAR()、UNICODE()和NCHAR()函數是相似的,它們都可以在字符和字符的標準數字表示之間轉換。如果在計算機上使用英語,則鍵盤上的每個字符都是用ASCII碼表示的。為了支持所有可印刷的語言,人們制訂了Unicode標準,它支持多種語言特定的字符集。每個Unicode字符需要2個字節的存儲空間,是ASCII與ANSI字符的兩倍。但是使用2個字就可以表示超過65 000個不同的字符,完全能夠支持東歐和亞洲字符。SQL Server同時支持ASCII與Unicode兩種標準。
ASCII()和CHAR()是兩個基於ASCII的函數,這兩個函數可將計算機上應用的每個字符表示為數字。要確定代表一個字符的數字是什麼,就應給ASCII()函數傳送只包含一個字符的字符串,如下:SELECT ASCII(‘A’) 結果是65。
如要將一個已知數字轉換為字符,則使用CHAR()函數即可:SELECT CHAR(65)結果是A。
UNICODE()函數和CHAR()函數的功能相同,只不過NCHAR()是用於Unicode字符的。SQL Server的nchar與nvarchar類型能存儲任何Unicode字符,可以和這兩個函數一起使用。對於特別大的值,ntext類型和nvarchar(max)類型也支持Unicode字符。要返回擴展字符編碼集中的字符,可以將字符編碼傳遞給NCHAR()函數:SELECT NCHAR(65) 返回字母A。
SELECT NCHAR(194) 返回帶重音符號的小寫a。帶聲調的。
CHARINDEX()和PATINDEX()函數是原始的SQL函數,用於尋找在一個字符串中某子字符串第一次出現的位置。返回值是一個整型值也就是位置信息,表示某子字符串的第一個字符在整個字符串中的位置索引。
PATINDEX()函數和CHARINDEXO函數類似,方法稍許不同,該函數增加了對通配符(即Like運算符)的支持。它將返回一個字符模式的索引。注意,如果和這些大字符類型一起使用,PATINDEX()函數將返回bigint類型的值,而不是int類型的值。
LEN()函數用於返回一個代表字符串長度的整型值。這個函數使我們使用最多的函數,經常與其他函數一起使用,一般循環或者在一些規則中使用。例如在輸入一些數據時判斷一下是否超出最大值範圍,在輸入日期時判斷一下輸入的日期是否需要用0補位等。
EFT()與RIGHT()函數是相似的,它們都返回一定長度的子字符串。這兩個函數的區別是,它們返回的分別是字符串的不同部分。LEFT()函數返回字符串最左邊的字符,順序從左數到右。RIGHT()函數正好相反,它從最右邊的字符開始,以從右到左的順序返回特定數量的字符。
SUBSTRING()函數能夠從字符串的一個位置開始,往右數若干字符,返回一個特定長度的字符串。和LEFT()函數不同之處是,該函數可以指定從哪個位置開始計數,這樣就可以在字符串的任何位置摘取子字符串了。這個函數需要三個參數:要解析的字符串、起始位置索引、要返回的子字符串長度。如果要返回到所輸入字符串尾部的所有字符,可以使用比所需長度更大的長度值。如圖所示函數在字符串第二個位置開始截取,共截取五個字符返回。
LOWER()和UPPER()函數這兩個函數很容易理解,它們用於將字符串中所有字符分別都轉換為小寫和大寫,這在比較用戶輸入或者存儲用於比較的字符串時是非常有用的。字符串比較通常是區分大小寫的,這取決於SQL Server安裝時的設置。如果和其他的字符串操縱函數一起使用,就可以將字符串轉換為合適的大小寫,以便存儲或顯示。
LTRIM()和RTRIM()這兩個函數分別返回將字符串的左邊和右邊的空白修剪掉之後的字符串:其實就是去掉左邊最後面或者右邊最後面的空格。
REPLACE()函數可以把字符串中的某個字符或某個子字符串替換為另一個字符或者子字符串,該函數可以用於全局查找和替換工具中。例如在字符串中出現一些明感的詞匯這時就要替換掉或者刪除掉。或者現在一些網站為了做到偽原創而進行近義詞替換讓搜尋引擎當原創收錄。
REPLICATE()和SPACE()函數在需要將一些字符重復填充進一個字符串時,這兩個函數是非常有用的。這里也使用SUBSTRING()例子中的臨時表為每個名字填滿20個字符,然後將20減去各個字符串的長度,以便將正確的值傳遞給REPLICATE()函數。例如:有一些數據不能給用戶看到只能隱藏部分信息,用戶的用戶名,手機號碼,提交數據的ip地址等明感信息。
REVERSE()函數用於將字符串中的字符顛倒過來。這在處理連接列表中的單個字符值時將會被用到。
STUFF()函數可將字符串中的一部分替換為另一個字符串。它本質上是將一個字符串以特定的長度插入另一個字符串中的特定位置上。這對於源值與目的值的長度不一樣的字符串替換是很有用的。下圖是將第10個字符串開始替換2個字符替換成11.
QUOTENAME()函數和SQL Server對象名組合使用,以將結果傳遞給表達式。它只用於給輸入的字符串加一對方括號,並返回新形成的字符串。如果參數包含保留的分隔符或者封裝字符(比如引號或括號),這個函數將修改字符串,以便SQL Server能將結果字符串中的這類字符當成文本字符。
MSSQL字符處理函數很多,一般很少有單一使用的,幾乎都是幾個一起使用得到想要的結果。在實際應用中很少在mssql中使用字符處理函數一般都是在客戶端處理也就是在程序端處理因為在mssql中處理相對來說比較浪費系統資源,而在客戶端處理完以後把結果集直接插入到數據庫中的話比較節省系統資源。