第107章 SQL函数 $PIECE
文章目錄
- 第107章 SQL函數 $PIECE
- 大綱
- 參數
- 描述
- 參數
- string-expression
- delimiter
- from
- to
- 示例
- 注意
- 使用`$PIECE`解壓數據值
- $PIECE 和 $LENGTH
- $PIECE and $LIST
- Null Values
- 嵌套 $PIECE 操作
第107章 SQL函數 $PIECE
返回由分隔符標識的子字符串的字符串函數。
大綱
$PIECE(string-expression,delimiter[,from[,to]])參數
- string-expression - 要從中提取子字符串的目標字符串。
表達式,可以是字段名、字符串字面值、數字或其他函數的結果。 - delimiter - 用于標識子字符串的分隔符。
- from - 可選-指定要從目標字符串返回的子字符串或子字符串范圍的開頭的整數。
子字符串由分隔符分隔,從1開始計數。
如果省略,則返回第一個子字符串。 - to - 可選-一個整數,指定從目標字符串返回的子字符串范圍的結束子字符串。
必須與from連用。
描述
$PIECE從字符串表達式中返回指定的子字符串(PIECE)。
返回的子字符串取決于所使用的參數:
- $PIECE(string-expression,delimiter)返回string-expression中的第一個子字符串。
如果delimiter出現在字符串表達式中,則這是在delimiter第一次出現之前的子字符串。
如果分隔符沒有出現在字符串表達式中,則返回的子字符串為字符串表達式。 - $PIECE(string-expression,delimiter,from)返回string-expression的第n個片段的子字符串,其中整數n由from參數指定,片段由一個分隔符分隔。
分隔符不返回。 - $PIECE(string-expression,delimiter,from,to)返回一個范圍的子字符串,包括從中指定的子字符串到到中指定的子字符串。
$PIECE的這種4個參數形式返回一個字符串,其中包括在from和to子字符串之間出現的任何中間分隔符。
如果to大于子字符串的數量,則返回的子字符串包括到string-expression字符串結尾的所有子字符串。
參數
string-expression
要從其中返回子字符串的字符串。
它可以是字符串字面值、變量名或任何計算結果為字符串的有效表達式。
字符串通常包含用作分隔符的字符(或字符串)的實例。
此字符或字符串也不能用作字符串表達式中的數據值。
如果你指定空字符串(null)作為目標字符串,$PIECE返回<null>,空字符串。
delimiter
用于在字符串表達式中分隔子字符串的搜索字符串。
它可以是數字字面值或字符串字面值(用引號括起來)、變量名或計算結果為字符串的表達式。
通常,分隔符是一個指定的字符,它永遠不會在字符串數據中使用,但僅用于作為分隔子字符串的分隔符使用。
分隔符也可以是多字符搜索字符串,其中的單個字符可以在字符串數據中使用。
如果指定空字符串(null)作為分隔符,$PIECE返回<null>,空字符串。
from
字符串表達式中的子字符串數,從1開始計算。
它必須是正整數、整型變量的名稱或計算結果為正整數的表達式。
子字符串由分隔符分隔。
- 如果from參數被省略或設置為1,$PIECE返回string-expression的第一個子字符串。
如果string-expression不包含指定的分隔符,from值為1將返回string-expression。 - 如果from參數通過計數來標識string-expression中的最后一個子字符串,則返回這個子字符串,無論它后面是否有分隔符。
- 如果from的值是NULL,空字符串,零,或負數,并且指定了no to參數,$PIECE返回一個空字符串。
但是,如果指定了to參數,$PIECE將這些from值視為from=1。 - 如果from的值大于string-expression中子字符串的數量,$PIECE返回一個空字符串。
如果from參數與to參數一起使用,它將標識將作為字符串返回的子字符串范圍的開始,并且應該小于to的值。
to
字符串表達式中結束from參數初始化的范圍的子字符串的數目。
返回的字符串包括from和to子字符串,以及任何中間子字符串和分隔它們的分隔符。
to參數必須為正整數、整型變量的名稱或計算結果為正整數的表達式。
to參數必須與from一起使用,并且應該大于from的值。
- 如果from小于to, $PIECE返回一個由該范圍內所有分隔的子字符串組成的字符串,包括from和to子字符串。
這個返回的字符串包含此范圍內的子字符串和分隔符。 - 如果to大于帶分隔符的子字符串的數量,則返回的字符串包含所有字符串數據(子字符串和分隔符),從from子字符串開始,一直到字符串表達式字符串的結尾。
- 如果from等于to,則返回from子字符串。
- 如果from大于to, $PIECE返回一個空字符串。
- 如果to是空字符串(null), $PIECE返回一個空字符串。
示例
下面的示例返回由","分隔符標識的第一個子字符串'Red':
SELECT $PIECE('Red,Green,Blue,Yellow,Orange,Black',',')Red下面的示例返回由","分隔符標識的第三個子字符串'Blue':
SELECT $PIECE('Red,Green,Blue,Yellow,Orange,Black',',',3)Blue下面的例子返回'Blue,Yellow,Orange', colorlist中的第三到第五個元素,用","分隔:
SELECT $PIECE('Red,Green,Blue,Yellow,Orange,Black',',',3,5)Blue,Yellow,Orange下面的$PIECE函數都返回'123',表明當from為1時,雙參數形式等價于三參數形式:
SELECT $PIECE('123#456#789','#') AS TwoArg123 SELECT $PIECE('123#456#789','#',1) AS ThreeArg123下面的示例使用多字符分隔符字符串'#-#'返回第三個子字符串'789'。
這里,分隔符字符串的組成字符'#'和'-'可以用作數據值;
只保留指定的字符序列(#-#):
下面的例子返回“MAR;APR;MAY”。
它們由第三個到第五個子字符串組成,由';'分隔符標識:
下面的例子使用$PIECE從員工名和供應商聯系人名中提取出姓氏,然后執行一個JOIN,返回與供應商聯系人姓相同的員工的實例:
SELECT E.Name,V.Contact FROM Sample.Employee AS E INNER JOIN Sample.Vendor AS V ON $PIECE(E.Name,',')=$PIECE(V.Contact,',')注意
使用$PIECE解壓數據值
$PIECE 通常用于“解包”包含由分隔符分隔的多個字段的數據值。典型的分隔符包括斜杠 (/)、逗號 (,)、空格 ( ) 和分號 (;)。以下示例值非常適合與 $PIECE 一起使用:
'John Jones/29 River St./Boston MA, 02095' 'Mumps;Measles;Chicken Pox;Diptheria' '45.23,52.76,89.05,48.27'$PIECE 和 $LENGTH
$LENGTH 的雙參數形式根據分隔符返回字符串中子字符串的數量。使用 $LENGTH 確定字符串中子字符串的數量,然后使用 $PIECE 提取單個子字符串。
$PIECE and $LIST
$PIECE 和 $LIST 函數使用的數據存儲技術不兼容,不應組合使用。例如,嘗試在使用 $LISTBUILD 創建的列表上使用 $PIECE 會產生不可預測的結果,應該避免。對于 SQL 函數和相應的 ObjectScript 函數都是如此。
$LIST 函數指定子字符串而不使用指定的分隔符。如果留出分隔符或字符序列不適合數據類型(例如,位串數據),則應使用 $LISTBUILD 和 $LIST SQL 函數來存儲和檢索子字符串。
Null Values
$PIECE 不區分具有空字符串值 (NULL) 的分隔子字符串和不存在的子字符串。兩者都返回 <null>,,即空字符串值。例如,以下示例均返回值為 7 的空字符串:
SELECT $PIECE('Red,Green,Blue,Yellow,Orange,Black',',',7)NUll SELECT $PIECE('Red,Green,Blue,Yellow,Orange,Black,',',',7)NULL在第一種情況下,沒有第七個子串;返回一個空字符串。在第二種情況下,有第七個子字符串,由字符串表達式字符串末尾的分隔符指示;第七個子字符串的值是空字符串。
以下示例顯示字符串表達式中的空值。它提取子字符串 3。此子字符串存在,但包含一個空字符串:
SELECT $PIECE('Red,Green,,Blue,Yellow,Orange,Black,',',',3)NULL以下示例還返回空字符串,因為指定的子字符串不存在:
SELECT $PIECE('Red,Green,,Blue,Yellow,Orange,Black,',',',0)NULL SELECT $PIECE('Red,Green,,Blue,Yellow,Orange,Black,',',',8,20)NULL在以下示例中,$PIECE 函數返回整個字符串表達式字符串,因為字符串表達式字符串中沒有出現分隔符:
SELECT $PIECE('Red,Green,Blue,Yellow,Orange,Black,','#')Red,Green,Blue,Yellow,Orange,Black,嵌套 $PIECE 操作
要執行復雜的提取,可以將 $PIECE 引用相互嵌套。內部 $PIECE 返回一個由外部 $PIECE 操作的子字符串。每個 $PIECE 都使用自己的分隔符。例如,以下返回狀態縮寫“MA”:
SELECT $PIECE($PIECE('John Jones/29 River St./Boston MA 02095','/',3),' ',2)MA下面是嵌套$PIECE操作的另一個例子,它使用了分隔符的層次結構。
首先,內部的$PIECE使用插入符號(^)分隔符來查找字符串的第二部分'A,B,C'。
然后外部$PIECE使用逗號(,)分隔符返回子串'A,B,C'的第一塊和第二塊('A,B'):
總結
以上是生活随笔為你收集整理的第107章 SQL函数 $PIECE的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [详细过程] | 使用tokenizer
- 下一篇: 圆梦腾讯之后,我收集整理了这份“2022