#CONCAT
CONCAT函数将多个expr的值连接成一个字符串,expr的个数最少为2个,最多为65535个。
本函数等同于:expr||expr||...。
本函数遵循如下规则:
- 对于非字符型/CLOB类型的expr值,函数先进行到CHAR类型的转换,如类型转换不成功,则返回类型转换错误。
- 参数类型优先级:
- 当expr值中不存在CLOB、NCLOB类型时:
- 仅包含CHAR/NCHAR类型数据时,函数返回CHAR/NCHAR类型的字符串。
- 仅包含CHAR和VARCHAR类型数据时,函数返回VARCHAR类型的字符串。
- 仅包含CHAR和NCHAR类型数据时,函数返回NCHAR类型的字符串。
- 存在NVARCHAR类型数据时,函数返回NVARCHAR类型的字符串。
- 不包含NVARCHAR类型数据,但存在VARCHAR和NCHAR类型时,函数返回NVARCHAR类型的字符串。
- 当expr值中存在CLOB或NCLOB时,通过如下三个规则判断返回的数据类型:
- 规则1:当参数列表中只有一个CLOB时,如果前面不包含NCHAR、NVARCHAR数据,则返回CLOB,否则返回NCLOB。
- 规则2:当参数列表中只有一个NCLOB时,如果前面包含NCHAR、NVARCHAR数据或者没有其他参数,则返回NCLOB,否则返回CLOB。
- 规则3:当有多个CLOB或这NCLOB时,则以参数列表中从左往右的第一个CLOB或者NCLOB作为唯一的CLOB或者NCLOB代入上述规则1或者规则2。
- 当expr值中不存在CLOB、NCLOB类型时:
- 当expr值为NULL时,函数将其转换为长度为0的VARCHAR字符串。
对于列存表中的CLOB类型字段,若某行数据为行外存储,则无法使用本函数。
示例
SELECT CONCAT(employee_name,' has joined us for ',CEIL(SYSDATE-entry_date),' days.') res FROM employees;
RES
----------------------------------------------------------------
Mask has joined us for 1001 days.
John has joined us for 2001 days.
Anna has joined us for 301 days.
Jack has joined us for 701 days.
Jim has joined us for 201 days.
Copied!