| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | [discrete][[esql-substring]]=== `SUBSTRING`*Syntax*[.text-center]image::esql/functions/signature/substring.svg[Embedded,opts=inline]*Parameters*`str`::String expression. If `null`, the function returns `null`.`start`::Start position.`length`::Length of the substring from the start position. Optional; if omitted, allpositions after `start` are returned.*Description*Returns a substring of a string, specified by a start position and an optionallength.*Supported types*include::types/substring.asciidoc[]*Examples*This example returns the first three characters of every last name:[source.merge.styled,esql]----include::{esql-specs}/docs.csv-spec[tag=substring]----[%header.monospaced.styled,format=dsv,separator=|]|===include::{esql-specs}/docs.csv-spec[tag=substring-result]|===A negative start position is interpreted as being relative to the end of thestring. This example returns the last three characters of of every last name:[source.merge.styled,esql]----include::{esql-specs}/docs.csv-spec[tag=substringEnd]----[%header.monospaced.styled,format=dsv,separator=|]|===include::{esql-specs}/docs.csv-spec[tag=substringEnd-result]|===If length is omitted, substring returns the remainder of the string. Thisexample returns all characters except for the first:[source.merge.styled,esql]----include::{esql-specs}/docs.csv-spec[tag=substringRemainder]----[%header.monospaced.styled,format=dsv,separator=|]|===include::{esql-specs}/docs.csv-spec[tag=substringRemainder-result]|===
 |