SUBSTR2 Skalarfunktion

Die Funktion SUBSTR2 gibt eine Unterzeichenfolge aus einer Zeichenfolge zurück. Die resultierende Unterzeichenfolge beginnt an einer angegebenen Position in der Zeichenfolge und wird für eine angegebene oder Standardlänge fortgesetzt. Die Start-und Längenargumente werden in 16 -Bit- UTF-16 -Zeichenfolgeeinheiten (CODEUNITS16) ausgedrückt.

Read syntax diagramSkip visual syntax diagramSUBSTR2(string, start , length )

Das Schema ist SYSIBM.

zeichenfolge
Ein Ausdruck, der die Zeichenfolge angibt, von der die resultierende Unterzeichenfolge abgeleitet wird. Der Ausdruck muss einen Wert zurückgeben, der eine integrierte Zeichenfolge, eine Grafikzeichenfolge, einen numerischen Datentyp oder einen Datentyp für Datum und Uhrzeit ist. Eine Zeichenfolge kann nicht über das Attribut FOR BIT DATA verfügen (SQLSTATE 428GC). Wenn der Wert kein Zeichenfolgedatentyp ist, wird er implizit in VARCHAR umgesetzt, bevor die Funktion ausgewertet wird. Eine Unterzeichenfolge von Zeichenfolge ist null oder mehr zusammenhängende Byte von Zeichenfolge.
Start
Ein Ausdruck, der die Anfangsposition in Zeichenfolge für den Anfang der Ergebnisunterzeichenfolge in 16 -Bit- UTF-16 -Zeichenfolgeeinheiten angibt. Der Ausdruck muss einen Wert zurückgeben, der ein integrierter numerischer Datentyp, CHAR, VARCHAR, GRAPHIC oder VARGRAPHIC ist. Wenn der Wert nicht vom Typ INTEGER ist, wird er implizit in INTEGER umgesetzt, bevor die Funktion ausgewertet wird.

Wenn start positiv ist, wird die Startposition vom Anfang der Zeichenfolge berechnet. Wenn start größer als die Länge von Zeichenfolge in 16-Bit-Zeichenfolgeeinheiten UTF-16 ist, wird eine Zeichenfolge mit der Länge null zurückgegeben.

Wenn start negativ ist, wird die Startposition ausgehend vom Ende der Zeichenfolge durch Rückwärtszählen berechnet. Wenn der absolute Wert von start größer als die Länge von Zeichenfolge in 16-Bit-Zeichenfolgeeinheiten UTF-16 ist, wird eine Zeichenfolge mit Nulllänge zurückgegeben.

Wenn start 0 ist, wird die Anfangsposition 1 verwendet.

Länge
Ein Ausdruck, der die Länge der resultierenden Unterzeichenfolge in 16-Bit-Zeichenfolgeeinheiten UTF-16 angibt. Wenn length angegeben wird, muss der Ausdruck einen Wert zurückgeben, der ein integrierter numerischer Datentyp, CHAR, VARCHAR, GRAPHIC oder VARGRAPHIC ist. Wenn der Wert nicht vom Typ INTEGER ist, wird er implizit in INTEGER umgesetzt, bevor die Funktion ausgewertet wird.

Wenn der Wert für length größer als die Anzahl der 16-Bit-Zeichenfolgeeinheiten UTF-16 von der Anfangsposition bis zum Ende der Zeichenfolge ist, ist die Länge der resultierenden Unterzeichenfolge die Länge des ersten Arguments in 16-Bit-Zeichenfolgeeinheiten UTF-16 minus der Anfangsposition plus eins.

Wenn der Wert für Länge kleiner-gleich null ist, ist das Ergebnis eine Zeichenfolge mit Nulllänge.

Der Standardwert für länge ist die Anzahl von CODEUNITS16 von der durch start angegebenen Position bis zum letzten Byte der Zeichenfolge.

Wenn zeichenfolge ein Datentyp CHAR oder VARCHAR ist, ist das Ergebnis der Funktion ein VARCHAR-Datentyp. Wenn Zeichenfolge ein CLOB ist, ist das Ergebnis der Funktion ein CLOB. Wenn Zeichenfolge ein Datentyp GRAPHIC oder VARGRAPHIC ist, ist das Ergebnis der Funktion ein Datentyp VARGRAPHIC. Wenn Zeichenfolge ein DBCLOB ist, ist das Ergebnis der Funktion ein DBCLOB. Wenn das erste Argument eine Hostvariable ist, ist die Codepage des Ergebnisses die Abschnittscodepage; andernfalls ist es die Codepage des ersten Arguments.

Das Längenattribut des Ergebnisses ist mit dem Längenattribut des ersten Arguments identisch, sofern die Start-oder Längenargumente nicht als Konstanten angegeben werden. Wenn eine Konstante angegeben wird, basiert das Längenattribut des Ergebnisses auf der ersten gültigen Zeile in der folgenden Tabelle.

Tabelle 1. Längenattribut von SUBSTR2 Ergebnis, wenn Argumente Konstanten einschließen
Zeichenfolgeargument Startargument1 Längenargument Längenattribut des Ergebnisses2
Zeichentyp mit Längenattribut A Beliebiges gültiges Argument Konstantenwert L<=0 0
Zeichentyp mit Längenattribut A Konstantenwert S und | (S) | > A nicht angegeben oder ein gültiges Argument 0
Zeichentyp mit Längenattribut A keine Konstante Konstantenwert L>0 MIN (A L×4)
Zeichentyp mit Längenattribut A Konstantenwert S>0 nicht angegeben oder keine Konstante A-S+1
Zeichentyp mit Längenattribut A Konstantenwert S<0 nicht angegeben oder keine Konstante MIN (A, | (S) × 4 |)
Zeichentyp mit Längenattribut A Konstantenwert S>0 Konstantenwert L>0 MIN (A-S+1, L×4)
Zeichentyp mit Längenattribut A Konstantenwert S<0 Konstantenwert L>0 MIN (A, | (S) × 4 |, L×4)
Grafiktyp mit Längenattribut A Beliebiges gültiges Argument Konstantenwert L<=0 0
Grafiktyp mit Längenattribut A Konstantenwert S und | (S) | > A nicht angegeben oder ein gültiges Argument 0
Grafiktyp mit Längenattribut A keine Konstante Konstantenwert L>0 MIN (A, L)
Grafiktyp mit Längenattribut A Konstantenwert S>0 nicht angegeben oder keine Konstante A-S+1
Grafiktyp mit Längenattribut A Konstantenwert S<0 nicht angegeben oder keine Konstante | (S) |
Grafiktyp mit Längenattribut A Konstantenwert S>0 Konstantenwert L>0 MIN (A-S+1, L)
Grafiktyp mit Längenattribut A Konstantenwert S<0 Konstantenwert L>0 MIN (| (S) |, L) |
Hinweise:

1 Wenn der Wert 0 für das Startargument angegeben wird, verwenden Sie den Wert 1 für S, wenn Sie auf diese Tabelle verweisen.

2 Das Längenattribut des Ergebnisses für einige Zeichenergebnistypen umfasst eine Konstante, die mit einem Faktor von 4 multipliziert wird. Dieser Multiplikator deckt die Worst-Case-Erweiterung ab, die aus den folgenden Faktoren abgeleitet wird:
  • Multiplizieren mit 2, um von der Zählung in 16 -Bit- UTF-16 -Zeichenfolgeeinheiten zur Zählung in Byte zu wechseln, die für die Längenattribute eines Zeichendatentyps verwendet werden
  • Multiplizieren mit 2, da ein 2-Byte-Zeichen in UTF-16 durch bis zu 4 Byte in einer Zeichenfolge dargestellt werden kann
Wenn ein Argument der Funktion SUBSTR2 null sein kann, dann kann das Ergebnis null sein. Wenn ein Argument null ist, ist das Ergebnis der Nullwert.

Hinweise

  • Im dynamischen SQL können Zeichenfolge, Anfangund Länge durch eine Parametermarke dargestellt werden. Wenn eine nicht typisierte Parametermarke für eine Zeichenfolge verwendet wird, ist der Operand nullfähig und wenn die Datenbank Grafikdatentypen unterstützt, lautet der Datentyp des Operanden VARGRAPHIC (16336). Andernfalls ist der Datentyp VARCHAR (32672).
  • Wenn Zeichenfolge eine gemischte Einzelbyte-und Mehrbytezeichenfolge ist, kann das Ergebnis abhängig von den Werten für start und längeFragmente von Mehrbytezeichen enthalten. Das Ergebnis könnte beispielsweise mit dem dritten Byte eines Mehrbytezeichens beginnen oder mit dem ersten Byte eines Mehrbytezeichens enden. Die Funktion SUBSTR2 erkennt diese Teilzeichen und ersetzt jedes Byte eines unvollständigen Zeichens durch ein einzelnes Leerzeichen.
  • SUBSTR2 ähnelt der Funktion SUBSTR mit den folgenden Ausnahmen:
    • SUBSTR2 unterstützt einen negativen Anfangswert, der angibt, dass die Verarbeitung am Ende der Zeichenfolge beginnen soll.
    • SUBSTR2 unterstützt einen Wert length , der größer als die berechnete Ergebnislänge ist. In solchen Fällen wird eine kürzere Zeichenfolge anstelle eines Fehlers zurückgegeben.
    • SUBSTR2 gibt den Ergebnisdatentyp VARCHAR zurück, wenn der Eingabedatentyp CHAR ist. VARGRAPHIC ist der Ergebnisdatentyp, der zurückgegeben wird, wenn der Eingabetyp GRAPHIC ist.
    • Das Längenattribut des Ergebnisses für SUBSTR2 ist entweder mit dem Längenattribut des ersten Arguments identisch oder es wird basierend auf dem Start-oder Längenattribut abgeleitet, wenn es sich bei einem dieser Attribute um Konstanten handelt.
    • SUSTR2 gibt ein Ergebnis mit einem Längenattribut zurück, das dem Längenattribut des ersten Arguments entspricht, sofern die Start-oder Längenargumente nicht als Konstanten angegeben sind. Wenn eine Konstante angegeben wird, wird das Längenattribut des Ergebnisses basierend auf den Start-bzw. Längenattributen abgeleitet (siehe vorherige Tabelle).

Beispiele

  • Beispiel 1: Verwenden Sie die folgenden Hostvariablen:
    • NAME (VARGRAPHIC(50) mit dem Wert 'Roméo Jürgen'
    • SURNAME POS (INTEGER) mit dem Wert 7
    SUBSTR2(:NAME, :SURNAME_POS)
    gibt den Wert Jürgen zurück.
    SUBSTR2(:NAME, :SURNAME_POS,2)
    gibt den Wert zurück.
  • Beispiel 2: Wählen Sie alle Zeilen aus der Tabelle PROJECT aus, die mit 'ING' enden.
    SELECT * FROM PROJECT
       WHERE SUBSTR2(PROJNAME,-3) = 'ING'