DB2 Scalar functions - INSERT
The INSERT function returns a string where, beginning at start in source-string, length of the specified code units have beendeleted and insert-string has been inserted.
The schema is SYSIBM. The SYSFUN version of the INSERT function continues to be available.
The INSERT function is identical to the OVERLAY function, except that the length argument is mandatory.
CODEUNITS16 specifies that start and length are expressed in 16-bit UTF-16 code units. CODEUNITS32 specifies that start and length are expressed in 32-bit UTF-32 code units. OCTETS specifies that start and length are expressed in bytes.
If the string unit is specified as CODEUNITS16 or CODEUNITS32, and the result is a binary string or bit data, an error is returned (SQLSTATE 428GC). If the string unit is specified as CODEUNITS16 or OCTETS, and the string units of source-string is CODEUNITS32, an error is returned (SQLSTATE 428GC). If the string unit is specified as OCTETS, the operation is performed in the code page of the source-string. If a string unit is not explicitly specified, the string unit of the source-string determines the unit that is used. For more information about CODEUNITS16, CODEUNITS32, and OCTETS, see String units in built-in functions in Character strings.
The data type of the result depends on the data types of source-string and insert-string, as shown in the following tables of supported type combinations. The string unit of the result is the string unit of source-string. If either source-string or insert-string is defined as FOR BIT DATA the other argument cannot be defined with string units of CODEUNITS32. The second table applies only to Unicode databases.
If source-string or insert-string is a binary data type and the other is a FOR BIT DATA string, the argument that is not a binary data type is handled as if it was cast to the corresponding binary data type.
A source-string can have a length of 0; in this case, start must be 1 (as implied by the bounds for start described previously), and the result of the function is a copy of the insert-string.
An insert-string can also have a length of 0. This has the effect of deleting the code units identified by start and length from the source-string.
The length attribute of the result is the length attribute of source-string plus the length attribute of insert-string when the string units of the source-string and insert-string are the same or the result string units is CODEUNITS32. Special cases are listed in the following table.
The actual length of the result depends on the actual length of source-string, the actual length of the of the deleted string, the actual length of the insert-string, and string units used for the start and length arguments. For example, if the string arguments are character strings in OCTETS and the OCTETS is used as the fourth argument, the actual length of the result is A1 - MIN((A1 - V2 + 1), V3) + A4, where:
If any argument can be null, the result can be null; if any argument is null, the result is the null value.
INSISTING
INSISERTING
INSTING
INSERTING
SELECT INSERT('INSERTING',4,2,'IS'), INSERT('INSERTING',4,0,'IS'), INSERT('INSERTING',4,2,'') FROM SYSIBM.SYSDUMMY1
XXINSERTING
XXNSERTING
XXSERTING
XXERTING
SELECT INSERT('INSERTING',1,0,'XX'), INSERT('INSERTING',1,1,'XX'), INSERT('INSERTING',1,2,'XX'), INSERT('INSERTING',1,3,'XX') FROM SYSIBM.SYSDUMMY1
ABCABCXX
ABCABC
SELECT INSERT('ABCABC',7,0,'XX') FROM SYSIBM.SYSDUMMY1
Hegelstraße
Hegelstrasse
SELECT INSERT('Hegelstraße',10,1,'ss',CODEUNITS16) FROM SYSIBM.SYSDUMMY1
&N~AB
&
~
N
A
B
Assume that the variables UTF8_VAR and UTF16_VAR contain the UTF-8 and the UTF-16BE representations of the string, respectively. Use the INSERT function to insert a C into the Unicode string &N~AB.
C
SELECT INSERT(UTF8_VAR, 1, 4, 'C', CODEUNITS16), INSERT(UTF8_VAR, 1, 4, 'C', CODEUNITS32), INSERT(UTF8_VAR, 1, 4, 'C', OCTETS) FROM SYSIBM.SYSDUMMY1
CAB
CB
CN~AB
SELECT INSERT(UTF8_VAR, 5, 1, 'C', CODEUNITS16), INSERT(UTF8_VAR, 5, 1, 'C', CODEUNITS32), INSERT(UTF8_VAR, 5, 1, 'C', OCTETS) FROM SYSIBM.SYSDUMMY1
&N~CB
&N~AC
&C~AB
SELECT INSERT(UTF16_VAR, 1, 4, 'C', CODEUNITS16), INSERT(UTF16_VAR, 1, 4, 'C', CODEUNITS32), INSERT(UTF16_VAR, 1, 4, 'C', OCTETS) FROM SYSIBM.SYSDUMMY1
SELECT INSERT(UTF16_VAR, 5, 2, 'C', CODEUNITS16), INSERT(UTF16_VAR, 5, 1, 'C', CODEUNITS32), INSERT(UTF16_VAR, 5, 4, 'C', OCTETS) FROM SYSIBM.SYSDUMMY1
&N~C
&CAB