concat ↗
Use the concat() function to join two or more strings into a single, cohesive string.
Syntax
concat (<string1>, <string2>, ...)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
string1, string2, ... |
string | Yes | The string expressions whose values will be joined. Two or more strings are required. |
Returns
The concat() function returns a single string.
Usage notes
- The function strictly accepts string parameters.
- The
concat()function will not perform any implicit conversion of other data types to strings. - Explicit
to_string()conversion is necessary for non-string values (such as integers, floats, or booleans) to ensure type compatibility. - If any of the values passed to
concat()areNULL, the function will returnNULL.
Examples
Example 1: Concatenating two string literal values
Goal: Join two static string values into a new field.
XQL code:
config timeframe = 1d | dataset = sample_xql_raw | alter static_message = concat("Investigation: ", "Started") | fields event_id, static_message | limit 3
Explanation: For each record, the concat() function combines the two literal strings "Investigation: " and "Started", resulting in the value "Investigation: Started" for all records.
Output:
| EVENT_ID | STATIC_MESSAGE |
|---|---|
| 101 | "Investigation: Started" |
| 102 | "Investigation: Started" |
| 103 | "Investigation: Started" |
Example 2: Concatenating a string literal with a field value
Goal: Join a fixed string prefix with the value of an existing field.
XQL code:
config timeframe = 1d | dataset = sample_xql_raw | alter event_label = concat("Event ID: ", to_string(event_id)) | fields event_id, event_label | limit 3
Explanation: The to_string(event_id) function converts the numeric event_id into its string representation. concat() then joins the literal string "Event ID: " with the string version of the event_id, creating a unique event_label for each record.
Output:
| EVENT_ID | EVENT_LABEL |
|---|---|
| 101 | "Event ID: 101" |
| 102 | "Event ID: 102" |
| 103 | "Event ID: 103" |
Example 3: Concatenating multiple field values
Goal: Combine values from multiple existing fields into a single string.
XQL code:
config timeframe = 1d | dataset = sample_xql_raw | alter event_summary = concat(event_description, " (Success: ", to_string(is_successful), ", Duration: ", to_string(duration_seconds), ")") | fields event_id, event_description, is_successful, duration_seconds, event_summary | limit 3
Explanation: The functions to_string(is_successful) and to_string(duration_seconds) convert the boolean and numeric fields into strings. concat() then combines event_description, literal strings like " (Success: ", and the converted string representations into event_summary.
Output:
| EVENT_ID | EVENT_DESCRIPTION | IS_SUCCESSFUL | DURATION_SECONDS | EVENT_SUMMARY |
|---|---|---|---|---|
| 101 | "User login successful" | true | 1.5 | "User login successful (Success: true, Duration: 1.5)" |
| 102 | "File access attempt" | false | 0.8 | "File access attempt (Success: false, Duration: 0.8)" |
| 103 | "Network connection established" | true | 10.2 | "Network connection established (Success: true, Duration: 10.2)" |
Example 4: Concatenating extracted JSON scalar values
Goal: Use concat() with values extracted from a JSON field.
XQL code:
config timeframe = 1d | dataset = sample_xql_raw | alter status_code_value = coalesce(simple_json_data -> code, simple_json_data -> error_code) | alter full_status_message = concat("Status: ", status_code_value) | fields event_id, simple_json_data, status_code_value, full_status_message | limit 3
Explanation: The coalesce function attempts to get either code or error_code from simple_json_data as a string. concat() combines "Status: " with the extracted status_code_value. Because concat() returns NULL if any input is NULL, full_status_message is NULL for event 103 where neither key exists.
Output:
| EVENT_ID | SIMPLE_JSON_DATA | STATUS_CODE_VALUE | FULL_STATUS_MESSAGE |
|---|---|---|---|
| 101 | {"status": "ok", "code": 200} | "200" | "Status: 200" |
| 102 | {"status": "fail", "error": "access_denied"} | "access_denied" | "Status: access_denied" |
| 103 | {"connection_id": "CONN-001", "protocol": "TCP"} | NULL | NULL |
Example 5: Concatenating converted boot time values
Goal: Use concat() to prepend a string prefix to a converted timestamp field.
XQL code:
dataset = xdr_data | fields action_boot_time as abt | filter abt != null | alter abt_string = concat("str: ", to_string(abt)) | limit 1
Explanation: The query filters the xdr_data dataset to find the first record where action_boot_time is not NULL. Since action_boot_time is typically a numeric or timestamp type, the to_string() function is used to convert it before the concat() function joins it with the literal prefix "str: ".
Output:
| ABT | ABT_STRING |
|---|---|
| 1675238400 | "str: 1675238400" |