1. string expression. If `null`, the function returns `null`.
**Output**: integer
**Description**: Returns the length in characters of the input, if the string expression is of a character data type; otherwise, returns the length in bytes of the string expression (the smallest integer not less than the number of bits divided by 8).
```sql
SELECT CHAR_LENGTH('Elastic');
CHAR_LENGTH('Elastic')
----------------------
7
```
## `CONCAT` [sql-functions-string-concat]
```sql
CONCAT(
string_exp1, <1>
string_exp2) <2>
```
**Input**:
1. string expression. Treats `null` as an empty string.
2. string expression. Treats `null` as an empty string.
**Output**: string
**Description**: Returns a character string that is the result of concatenating `string_exp1` to `string_exp2`.
The resulting string cannot exceed a byte length of 1 MB.
```sql
SELECT CONCAT('Elasticsearch', ' SQL');
CONCAT('Elasticsearch', ' SQL')
-------------------------------
Elasticsearch SQL
```
## `INSERT` [sql-functions-string-insert]
```sql
INSERT(
source, <1>
start, <2>
length, <3>
replacement) <4>
```
**Input**:
1. string expression. If `null`, the function returns `null`.
2. integer expression. If `null`, the function returns `null`.
3. integer expression. If `null`, the function returns `null`.
4. string expression. If `null`, the function returns `null`.
**Output**: string
**Description**: Returns a string where `length` characters have been deleted from `source`, beginning at `start`, and where `replacement` has been inserted into `source`, beginning at `start`.
The resulting string cannot exceed a byte length of 1 MB.
```sql
SELECT INSERT('Elastic ', 8, 1, 'search');
INSERT('Elastic ', 8, 1, 'search')
----------------------------------
Elasticsearch
```
## `LCASE` [sql-functions-string-lcase]
```sql
LCASE(string_exp) <1>
```
**Input**:
1. string expression. If `null`, the function returns `null`.
**Output**: string
**Description**: Returns a string equal to that in `string_exp`, with all uppercase characters converted to lowercase.
```sql
SELECT LCASE('Elastic');
LCASE('Elastic')
----------------
elastic
```
## `LEFT` [sql-functions-string-left]
```sql
LEFT(
string_exp, <1>
count) <2>
```
**Input**:
1. string expression. If `null`, the function returns `null`.
2. integer expression. If `null`, the function returns `null`. If `0` or negative, the function returns an empty string.
**Output**: string
**Description**: Returns the leftmost count characters of `string_exp`.
```sql
SELECT LEFT('Elastic',3);
LEFT('Elastic',3)
-----------------
Ela
```
## `LENGTH` [sql-functions-string-length]
```sql
LENGTH(string_exp) <1>
```
**Input**:
1. string expression. If `null`, the function returns `null`.
**Output**: integer
**Description**: Returns the number of characters in `string_exp`, excluding trailing blanks.
```sql
SELECT LENGTH('Elastic ');
LENGTH('Elastic ')
--------------------
7
```
## `LOCATE` [sql-functions-string-locate]
```sql
LOCATE(
pattern, <1>
source <2>
[, start]<3>
)
```
**Input**:
1. string expression. If `null`, the function returns `null`.
2. string expression. If `null`, the function returns `null`.
3. integer expression; optional. If `null`, `0`, `1`, negative, or not specified, the search starts at the first character position.
**Output**: integer
**Description**: Returns the starting position of the first occurrence of `pattern` within `source`. The optional `start` specifies the character position to start the search with. If the `pattern` is not found within `source`, the function returns `0`.
```sql
SELECT LOCATE('a', 'Elasticsearch');
LOCATE('a', 'Elasticsearch')
----------------------------
3
```
```sql
SELECT LOCATE('a', 'Elasticsearch', 5);
LOCATE('a', 'Elasticsearch', 5)
-------------------------------
10
```
## `LTRIM` [sql-functions-string-ltrim]
```sql
LTRIM(string_exp) <1>
```
**Input**:
1. string expression. If `null`, the function returns `null`.
**Output**: string
**Description**: Returns the characters of `string_exp`, with leading blanks removed.
1. string expression. If `null`, the function returns `null`.
2. string expression. If `null`, the function returns `null`.
**Output**: boolean value
**Description**: Returns `true` if the source expression starts with the specified pattern, `false` otherwise. The matching is case sensitive.
```sql
SELECT STARTS_WITH('Elasticsearch', 'Elastic');
STARTS_WITH('Elasticsearch', 'Elastic')
--------------------------------
true
```
```sql
SELECT STARTS_WITH('Elasticsearch', 'ELASTIC');
STARTS_WITH('Elasticsearch', 'ELASTIC')
--------------------------------
false
```
## `SUBSTRING` [sql-functions-string-substring]
```sql
SUBSTRING(
source, <1>
start, <2>
length) <3>
```
**Input**:
1. string expression. If `null`, the function returns `null`.
2. integer expression. If `null`, the function returns `null`.
3. integer expression. If `null`, the function returns `null`.
**Output**: string
**Description**: Returns a character string that is derived from `source`, beginning at the character position specified by `start` for `length` characters.
```sql
SELECT SUBSTRING('Elasticsearch', 0, 7);
SUBSTRING('Elasticsearch', 0, 7)
--------------------------------
Elastic
```
## `TRIM` [sql-functions-string-trim]
```sql
TRIM(string_exp) <1>
```
**Input**:
1. string expression. If `null`, the function returns `null`.
**Output**: string
**Description**: Returns the characters of `string_exp`, with leading and trailing blanks removed.
```sql
SELECT TRIM(' Elastic ') AS trimmed;
trimmed
--------------
Elastic
```
## `UCASE` [sql-functions-string-ucase]
```sql
UCASE(string_exp) <1>
```
**Input**:
1. string expression. If `null`, the function returns `null`.
**Output**: string
**Description**: Returns a string equal to that of the input, with all lowercase characters converted to uppercase.