从成功的 CONCAT 函数调用(或从串联(||)操作符,或对于确定他们的返回类型所遵循的规则与 CONCAT 相同的其他内建的字符串操纵函数)的返回值的数据类型依赖于参数的数据类型以及结果字符串的长度。在确定返回类型时,两个参数的顺序的意义不大。
在下列表格中,各行罗列 CONCAT 函数的第一个参数的有效的数据类型,各列罗列第二个参数的类型。每一行与列交叉处的单元展示可能的一个或多个返回类型。标明其他的行和列表示求值为非字符类型的参数,诸如数值或像 DECIMAL 或 DATE 一样的时间数据类型。
NCHAR | NVARCHAR | CHAR | VARCHAR | LVARCHAR | 其他 | |
---|---|---|---|---|---|---|
NCHAR | nchar | nvarchar 或 nchar | nchar | nvarchar 或 nchar | nvarchar 或 nchar | nvarchar 或 nchar |
NVARCHAR | nvarchar 或 nchar | nvarchar 或 nchar | nvarchar 或 nchar | nvarchar 或 nchar | nvarchar 或 nchar | nvarchar 或 nchar |
CHAR | nchar | nvarchar 或 nchar | char | varchar 或 lvarchar | lvarchar | varchar 或 lvarchar |
VARCHAR | nvarchar 或 nchar | nvarchar 或 nchar | varchar 或 lvarchar | varchar 或 lvarchar | lvarchar | varchar 或 lvarchar |
LVARCHAR | nvarchar 或 nchar | nvarchar 或 nchar | lvarchar | lvarchar | lvarchar | lvarchar |
其他 | nvarchar 或 nchar | nvarchar 或 nchar | varchar 或 lvarchar | varchar 或 lvarchar | lvarchar | varchar 或 lvarchar |
对于 CONCAT 之外的其他字符串操纵函数,DATE、DATETIME 或 MONEY 数据类型的参数往往返回 NVARCHAR 或 NCHAR 值,这依赖于结果字符串的长度。
此表格是对称的,因为参数的顺序对返回数据类型没有影响。对于内建的字符串操纵函数或运算符,用户定义的数据类型、大对象类型、复合的类型和其他扩展的数据类型不是有效的参数。
此表格还描述使用串联(||)运算符的表达式的返回数据类型。
对于 CHAR、NCHAR 和 LVARCHAR 数据类型,此处没有展示在其中的参数长度的总和超出大约 32 KB 限度的串联操作的结果。这会返回错误 -881,而不是串联的数据值。由于最大的 LVARCHAR 大小为 32,739 字节,且 CHAR 和 NCHAR 的限度都是 32,767 字节,因此错误 -881 总是与其限度为 255 字节的 VARCHAR 和 NVARCHAR 对象相关联,但自动的返回类型提升可降低此错误的发生几率。
下列表格总结 GBase 8s 如何基于参数类型,来确定来自这些字符串操纵函数的返回类型:
函数 | 如何确定函数的返回类型 |
---|---|
CONCAT、|| | 返回类型基于两个参数。请参考 表 1。 |
SUBSTR、SUBSTRING | 返回类型与 source string 类型相同。如果 source string 为主变量,则依赖于结果的长度,返回类型为 NVARCHAR 或 NCHAR。 |
TRIM、LTRIM、RTRIM | 返回类型依赖于源类型和返回的长度:
|
LPAD、RPAD | 返回类型基于 source_string 和 pad_string 参数。如果未指定 pad_string,则返回类型基于 source_string 的数据类型。 |
REPLACE | 返回类型基于 source_string 和 old_string 参数(以及基于 new_string 参数,如果指定了的话)。如果任何参数为主变量,则返回类型为 NCHAR。 |
ENCRYPT_AES、ENCRYPT_TDES、DECRYPT_BINARY、DECRYPT_CHAR | 对于不是 BLOB 或 CLOB 变量的参数,返回类型基于 data 和 encrypted_data 参数的数据类型。请参考 表 1。 |