String Functions
- reference
String functions perform operations on a string input value and returns a string or other value.
If any arguments to any of the following functions are MISSING then the result is also MISSING (i.e.
no result is returned).
Similarly, if any of the arguments passed to the functions are NULL or are of the wrong type (e.g.
an integer instead of a string), then NULL is returned as the result.
|
CONCAT(string1
, string2
, …)
Description
This function takes two or more strings and returns a new string after concatenating the input strings. If there are fewer than two arguments, then it returns an error.
Arguments
- string1, string2, ...
-
[At least 2 are required] The strings, or valid expressions which evaluate to strings, to be concatenated together.
CONCAT2(separator
, arg1
, arg2
, …)
Description
This function takes the input strings, or arrays of strings, and concatenates them with the specified separator between each input string. If there are fewer than two arguments, then it returns an error.
Arguments
- separator
-
[Required] The string to separate the input strings. If no separator is required, specify the empty string "".
- arg1, arg2, ...
-
[At least 1 is required] The strings, or arrays of strings, to be concatenated together.
Return Value
A new string, concatenated from the inputs, with the separator between each input. Arrays of strings are flattened and concatenated in the same order. If there is only one string argument, the separator is not used.
If any argument or array element is MISSING, returns MISSING. If any argument or array element is non-string, returns NULL.
CONTAINS(in_str, search_str)
Description
Checks whether or not the specified search string is a substring of the input string (i.e.
exists within).
This returns true
if the substring exists within the input string, otherwise false
is returned.
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that is the string to search within.
- search_str
-
A string, or any valid expression which evaluates to a string, that is the string to search for.
INITCAP(in_str)
Description
Converts the string so that the first letter of each word is uppercase and every other letter is lowercase (known as 'Title Case').
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that is the string to convert to title case.
LENGTH(in_str)
Equivalent: LEN()
Description
Finds the length of a string, where length is defined as the number of code points within the string.
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that is the string to find the length of.
LOWER(in_str)
Description
Converts all characters in the input string to lower case. This is useful for canonical comparison of string values.
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that is the string to convert to lower case.
LPAD(in_str, size [, char])
Description
Pads a string with leading characters. The function adds characters to the beginning of the string to pad the string to a specified length.
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that is the string to add the leading characters to.
- size
-
An integer, or any valid expression which evaluates to an integer, that specifies the desired length of the result string.
- char
-
[Optional; default is Unicode U+0020, i.e. space
" "
]A string, or any valid expression which evaluates to a string, that represents the characters to add to the input string.
Return Value
A string representing the input string with leading characters added.
-
If the specified size is smaller than the length of the input string, the input string is truncated and no padding is added.
-
If the specified size is larger than the length of the input string, but shorter than the length of the input string plus the padding characters, the padding characters are truncated.
-
If the specified size is greater than the length of the input string plus the padding characters, the padding characters are repeated in order until the specified size is reached.
Examples
SELECT LPAD("N1QL is awesome", 20) AS implicit_padding,
LPAD("N1QL is awesome", 20, "-*") AS repeated_padding,
LPAD("N1QL is awesome", 20, "987654321") AS truncate_padding,
LPAD("N1QL is awesome", 4, "987654321") AS truncate_string;
{
"results": [
{
"implicit_padding": " N1QL is awesome",
"repeated_padding": "-*-*-N1QL is awesome",
"truncate_padding": "98765N1QL is awesome",
"truncate_string": "N1QL"
}
]
}
LTRIM(in_str [, char])
Description
Removes all leading characters from a string. The function removes all consecutive characters from the beginning of the string that match the specified characters and stops when it encounters a character that does not match any of the specified characters.
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that is the string to remove the leading characters from.
- char
-
[Optional; default is whitespace, i.e. space
" "
, tab"\t"
, newline"\n"
, formfeed"\f"
, or carriage return"\r"
]A string, or any valid expression which evaluates to a string, that represents the characters to trim from the input string. Each character in this string will be trimmed from the input string, it is therefore not necessary to delimit the characters to trim. For example, specifying a character value of
"abc"
will trim the characters "a", "b" and "c" from the start of the string.
Examples
SELECT LTRIM("...N1QL is awesome", ".") as dots,
LTRIM(" N1QL is awesome", " ") as explicit_spaces,
LTRIM(" N1QL is awesome") as implicit_spaces,
LTRIM("N1QL is awesome") as no_dots;
{
"results": [
{
"dots": "N1QL is awesome",
"explicit_spaces": "N1QL is awesome",
"implicit_spaces": "N1QL is awesome",
"no_dots": "N1QL is awesome"
}
]
}
MASK(in_str [, options])
Description
Overlays specified characters in the string with masking characters. This may be useful when returning sensitive information, such as credit card numbers or email addresses.
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that represents the string to mask.
- options
-
An object containing the following possible parameters:
- mask
-
A string containing masking characters that will be used to overlay the input string. May optionally also contain hole characters, representing gaps in the mask; and inject characters, that are inserted into the output. (Default:
********
) - hole
-
A string containing the character or characters used to indicate holes in the mask string. (Default: space)
- inject
-
A string containing the character or characters in the mask string that are inserted into the output, rather than overlaying the input. (Default: none)
- length
-
Determines the length of the output string. (Default: missing)
-
If this property is missing, or set to anything other than
"source"
, the length of the output is dynamic. Any characters in the input up to the anchor point (see below) are included in the output. The mask then starts at the anchor point, and continues for the length of the specified mask string. Any characters in the input beyond the end of the mask are deleted. This method may therefore obscure the number of characters in the input. -
If the value is
"source"
, the length of the output is the same as the length of the input. Any characters in the input up to the anchor point are included in the output. The mask then starts at the anchor point. If the mask is longer than the remaining length of the input, the mask is truncated to fit. If the mask string is shorter than or the same length as the remaining length of the input, the mask continues for the length of the specified mask string. Any characters in the input beyond the end of the mask are included in the output.
-
- anchor
-
Determines where in the input string the mask should start. Possible values are
"start"
,"end"
, a regular expression string, a positive integer, or a negative integer. (Default:"start"
)-
"start"
— the mask begins at the start of the input and is applied towards the end. -
"end"
— the mask begins at the end of the input and is applied from the end towards the start. -
Regular expression — the mask begins at the first point in the input which matches the regular expression, and is applied towards the end. If you need to match the strings
"start"
or"end"
, use patterns such as"[s]tart"
or"[e]nd"
. -
Positive integer — the mask begins the specified number of characters after the start of the input, and is applied towards the end.
-
Negative integer — the mask begins the specified number of characters before the end of the input, and is applied towards the start.
If an anchor places the mask outside the boundaries of the input string, the input string is returned unchanged.
-
Examples
Default mask, custom mask, custom mask demonstrating holes.
SELECT MASK('SomeTextToMask') AS mask,
MASK('SomeTextToMask', {"mask": "++++"}) AS mask_custom,
MASK('SomeTextToMask', {"mask": "++++ ++++"}) AS mask_hole;
{
"results": [
{
"mask": "********",
"mask_custom": "++++",
"mask_hole": "++++Text++++"
}
]
}
Mask with character injection.
SELECT MASK('1234abcd5678efgh', {"mask": "****-****-****-####",
"hole": "#",
"inject": "-"}) AS mask_inject;
{
"results": [
{
"mask_inject": "****-****-****-efgh"
}
]
}
Mask anchored to the end of the source, with the output length determined by the source.
SELECT MASK('1234abcd5678efgh', {"mask": "****", "anchor": "end", "length": "source"})
AS end_anchor;
{
"results": [
{
"end_anchor": "1234abcd5678****"
}
]
}
Mask anchored at the pattern d5
.
SELECT MASK('1234abcd5678efgh', {"mask": "****", "anchor": "d5"}) AS regex_anchor;
{
"results": [
{
"regex_anchor": "1234abc****"
}
]
}
Mask anchored 2 characters from the end of the source, with length determined by the input string.
SELECT MASK('1234abcd5678efgh', {"mask": "****", "anchor": -2, "length": "source"})
AS negative_anchor
{
"results": [
{
"negative_anchor": "1234abcd56****gh"
}
]
}
Mask anchored at the 14th character, with length determined by the input string.
SELECT MASK('1234abcd5678efgh', {"mask": "****", "anchor": 14, "length": "source"})
AS positive_anchor;
{
"results": [
{
"positive_anchor": "1234abcd5678ef**"
}
]
}
POSITION(in_str, search_str)
Description
Finds the first position of the search string within the string, this position is zero-based, i.e., the first position is 0. If the search string does not exist within the input string then the function returns -1.
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that is the string to search within.
- search_str
-
A string, or any valid expression which evaluates to a string, that is the string to search for.
REPEAT(in_str, n)
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that is the string to repeat.
- n
-
An integer, or any valid expression which evaluates to an integer, that is the number of times to repeat the string.
Limitations
It is possible to generate very large strings using this function. In some cases the query engine may be unable to process all of these and cause excessive resource consumption. It is therefore recommended that you first validate the inputs to this function to ensure that the generated result is a reasonable size.
REPLACE(in_str, search_str, replace [, n ])
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that is the string to search for replacements in.
- search_str
-
A string, or any valid expression which evaluates to a string, that is the string to replace.
- replace
-
A string, or any valid expression which evaluates to a string, that is the string to replace the search string with.
- n
-
[Optional; default is all instances of the search string are replaced]
An integer, or any valid expression which evaluates to an integer, which represents the number of instances of the search string to replace. If a negative value is specified then all instances of the search string are replaced.
REVERSE(in_str)
Description
Reverses the order of the characters in a given string. i.e. The first character becomes the last character and the last character becomes the first character etc. This is useful for testing whether or not a string is a palindrome.
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that is the string to reverse.
RPAD(in_str, size [, char])
Description
Pads a string with trailing characters. The function adds characters to the end of the string to pad the string to a specified length.
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that is the string to add the trailing characters to.
- size
-
An integer, or any valid expression which evaluates to an integer, that specifies the desired length of the result string.
- char
-
[Optional; default is Unicode U+0020, i.e. space
" "
]A string, or any valid expression which evaluates to a string, that represents the characters to add to the input string.
Return Value
A string representing the input string with trailing characters added.
-
If the specified size is smaller than the length of the input string, the input string is truncated and no padding is added.
-
If the specified size is larger than the length of the input string, but shorter than the length of the input string plus the padding characters, the padding characters are truncated.
-
If the specified size is greater than the length of the input string plus the padding characters, the padding characters are repeated in order until the specified size is reached.
Examples
SELECT RPAD("N1QL is awesome", 20) AS implicit_padding,
RPAD("N1QL is awesome", 20, "-*") AS repeated_padding,
RPAD("N1QL is awesome", 20, "123456789") AS truncate_padding,
RPAD("N1QL is awesome", 4, "123456789") AS truncate_string;
{
"results": [
{
"implicit_padding": "N1QL is awesome ",
"repeated_padding": "N1QL is awesome-*-*-",
"truncate_padding": "N1QL is awesome12345",
"truncate_string": "N1QL"
}
]
}
RTRIM(in_str [, char])
Description
Removes all trailing characters from a string. The function removes all consecutive characters from the end of the string that match the specified characters and stops when it encounters a character that does not match any of the specified characters.
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that is the string to convert to remove trailing characters from.
- char
-
[Optional; default is whitespace, i.e. space
" "
, tab"\t"
, newline"\n"
, formfeed"\f"
, or carriage return"\r"
]A string, or any valid expression which evaluates to a string, that represents the characters to trim from the input string. Each character in this string will be trimmed from the input string, it is therefore not necessary to delimit the characters to trim. For example specifying a character value of
"abc"
will trim the characters"a"
,"b"
and"c"
from the start of the string.
Examples
SELECT RTRIM("N1QL is awesome...", ".") as dots,
RTRIM("N1QL is awesome ", " ") as explicit_spaces,
RTRIM("N1QL is awesome ") as implicit_spaces,
RTRIM("N1QL is awesome") as no_dots;
{
"results": [
{
"dots": "N1QL is awesome",
"explicit_spaces": "N1QL is awesome",
"implicit_spaces": "N1QL is awesome",
"no_dots": "N1QL is awesome"
}
]
}
SPLIT(in_str [, in_substr])
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that is the string to split.
- in_substr
-
A string, or any valid expression which evaluates to a string, that is the substring to split the input string on.
Examples
SELECT SPLIT("N1QL is awesome", " ") as explicit_spaces,
SPLIT("N1QL is awesome") as implicit_spaces,
SPLIT("N1QL is awesome", "is") as split_is
{
"results": [
{
"explicit_spaces": [
"N1QL",
"is",
"awesome"
],
"implicit_spaces": [
"N1QL",
"is",
"awesome"
],
"split_is": [
"N1QL ",
" awesome"
]
}
]
}
SUBSTR(in_str, start_pos [, length])
Description
Returns the substring (of given length) starting at the provided position. The position is zero-based, i.e. the first position is 0. If position is negative, it is counted from the end of the string; -1 is the last position in the string.
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that is the string to convert to extract the substring from.
- start_pos
-
An integer, or any valid expression which evaluates to an integer, that is the start position of the substring.
- length
-
[Optional; default is to capture to the end of the string]
An integer, or any valid expression which evaluates to an integer, that is the length of the substring to extract.
SUFFIXES(in_str)
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that is the string to generate the suffixes of.
Examples
SELECT SUFFIXES("N1QL is awesome") as n1ql
{
"results": [
{
"n1ql": [
"N1QL is awesome",
"1QL is awesome",
"QL is awesome",
"L is awesome",
" is awesome",
"is awesome",
"s awesome",
" awesome",
"awesome",
"wesome",
"esome",
"some",
"ome",
"me",
"e"
]
}
]
}
The following example uses the SUFFIXES()
function to index and query the airport names when a partial airport name is given.
For this example, set the query context to the inventory
scope in the travel sample dataset.
For more information, see Query Context.
CREATE INDEX autocomplete_airport_name
ON airport ( DISTINCT ARRAY array_element FOR array_element
IN SUFFIXES(LOWER(airportname)) END )
SELECT airportname
FROM airport
WHERE ANY array_element
IN SUFFIXES(LOWER(airportname)) SATISFIES array_element LIKE 'washing%' END
{
"results": [
{
"airportname": "Ronald Reagan Washington Natl"
},
{
"airportname": "Washington Dulles Intl"
},
{
"airportname": "Baltimore Washington Intl"
},
{
"airportname": "Washington Union Station"
}
]
}
This blog provides more information about this example.
TITLE(in_str)
Alias for INITCAP().
TOKENS(in_str, opt)
Description
This function tokenizes (i.e. breaks up into meaningful segments) the given input string based on specified delimiters, and other options. It recursively enumerates all tokens in a JSON value and returns an array of values (JSON atomic values) as the result.
Arguments
- in_str
-
A valid JSON object, this can be anything: constant literal, simple JSON value, JSON key name or the whole document itself.
The following table lists the rules for each JSON type:
JSON Type Return Value MISSING
[]
NULL
[NULL]
false
[false]
true
[true]
number
[number]
string
SPLIT(string)
array
FLATTEN(TOKENS(element) for each element in array
(Concatenation of element tokens)
object
For each name-value pair, name+TOKENS(value)
- opt
-
A JSON object indicating the options passed to the
TOKENS()
function. Options can take the following options, and each invocation ofTOKENS()
can choose one or more of the options:- {"name": true}
-
Optional. Valid values are
true
orfalse
. By default, this is set to true andTOKENS()
will include field names. You can choose to not include field names by setting this option tofalse
. - {"case":"lower"}
-
Optional. Valid values are
lower
orupper
. Default is neither, as in it returns the case of the original data. Use this option to specify the case sensitivity. - {"specials": true}
-
Optional. Use this option to preserve strings with specials characters, such as email addresses, URLs, and hyphenated phone numbers. The default value is
false
.The specials
options preserves special characters except at the end of a word.
Examples
By default, for speed, the results are randomly ordered.
To make the difference more clear between the first two example queries, the ARRAY_SORT() function is used.
|
specials
is FALSESELECT ARRAY_SORT(
TOKENS( ['jim@example.com, kim@example.com, http://example.com/, 408-555-1212'],
{'specials': false} ));
[
{
"$1": [
"1212",
"408",
"555",
"abc",
"com",
"http",
"jim",
"kim"
]
}
]
specials
is TRUESELECT ARRAY_SORT(
TOKENS( ['jim@example.com, kim@example.com, http://example.com/, 408-555-1212'],
{'specials': true} ));
[
{
"$1": [
"1212",
"408",
"408-555-1212",
"555",
"abc",
"com",
"http",
"http://example.com",
"jim",
"jim@example.com",
"kim",
"kim@example.com"
]
}
]
For this example, set the query context to the inventory
scope in the travel sample dataset.
For more information, see Query Context.
SELECT ARRAY_SORT( TOKENS(url) ) AS defaulttoken,
ARRAY_SORT( TOKENS(url, {"specials":true, "case":"UPPER"}) ) AS specialtoken
FROM hotel
LIMIT 1;
[
{
"defaulttoken": [
"http",
"org",
"uk",
"www",
"yha"
],
"specialtoken": [
"HTTP",
"HTTP://WWW.YHA.ORG.UK",
"ORG",
"UK",
"WWW",
"YHA"
]
}
]
You can also use {"case":"lower"}
or {"case":"upper"}
to have case sensitive search.
Index creation and querying can use this and other parameters in combination.
These parameters should be passed within the query predicates as well.
The parameters and values must match exactly for N1QL to pick up and use the index correctly.
case
and use it your applicationFor this example, set the query context to the inventory
scope in the travel sample dataset.
For more information, see Query Context.
CREATE INDEX idx_url_upper_special ON hotel(
DISTINCT ARRAY v FOR v IN
TOKENS(url, {"specials":true, "case":"UPPER"})
END );
SELECT name, address, url
FROM hotel
WHERE ANY v IN TOKENS(url, {"specials":true, "case":"UPPER"})
SATISFIES v = "HTTP://WWW.YHA.ORG.UK"
END;
{
"results": [
{
"address": "Capstone Road, ME7 3JE",
"name": "Medway Youth Hostel",
"url": "http://www.yha.org.uk"
}
]
}
TRIM(in_str [, char])
Description
Removes all leading and trailing characters from a string.
The function removes all consecutive characters from the beginning and end of the string that match the specified characters and stops when it encounters a character that does not match any of the specified characters.
This function is equivalent to calling LTRIM()
and RTRIM()
successively.
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that is the string to convert to remove trailing and leading characters from.
- char
-
[Optional; default is Unicode U+0020, i.e.
" "
]A string, or any valid expression which evaluates to a string, that represents the characters to trim from the input string. Each character in this string will be trimmed from the input string, it is therefore not necessary to delimit the characters to trim. For example specifying a character value of
"abc"
will trim the characters"a"
,"b"
and"c"
from the start of the string.
Examples
SELECT TRIM("...N1QL is awesome...", ".") as dots,
TRIM(" N1QL is awesome ", " ") as explicit_spaces,
TRIM(" N1QL is awesome ") as implicit_spaces,
TRIM("N1QL is awesome") as no_dots;
{
"results": [
{
"dots": "N1QL is awesome",
"explicit_spaces": "N1QL is awesome",
"implicit_spaces": "N1QL is awesome",
"no_dots": "N1QL is awesome"
}
]
}
UPPER(in_str)
Arguments
- in_str
-
A string, or any valid expression which evaluates to a string, that is the string to convert to upper case.