diff --git a/docs/images/ebnf/expression.svg b/docs/images/ebnf/expression.svg
index b428d87b51e56fb1d9c7b6fa219782012c725e12..4b03f78e7be001851e13cc124819ae51994cecbb 100644
Binary files a/docs/images/ebnf/expression.svg and b/docs/images/ebnf/expression.svg differ
diff --git a/docs/images/ebnf/substr.svg b/docs/images/ebnf/substr.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4f71e79b9b09ac5fed6518335ce5b20fee7fbfe3
Binary files /dev/null and b/docs/images/ebnf/substr.svg differ
diff --git a/docs/reference/ansi_sql.md b/docs/reference/ansi_sql.md
index 1ee185d3061c53049d857f8842685f706612119d..631c203f7222888789278871db26fbd42e7a6eb5 100644
--- a/docs/reference/ansi_sql.md
+++ b/docs/reference/ansi_sql.md
@@ -183,10 +183,10 @@ td.td3 ul {
             <td></td>
         </tr>
         <tr>
-            <td class="center"><span class="absent">E021-06</span></td>
+            <td class="center"><span class="partly">E021-06</span></td>
             <td>Функция SUBSTRING</td>
-            <td class="td3 center"></td>
-            <td></td>
+            <td class="td3 center">[SUBSTR](sql/substr.md)</td>
+            <td>Функция SUBSTRING не поддерживается, но есть SUBSTR</td>
         </tr>
         <tr>
             <td class="center"><span class="full">E021-07</span></td>
diff --git a/docs/reference/sql/substr.md b/docs/reference/sql/substr.md
new file mode 100644
index 0000000000000000000000000000000000000000..8cde121e28f443f5bc442b025bd7ad8bdee6736b
--- /dev/null
+++ b/docs/reference/sql/substr.md
@@ -0,0 +1,50 @@
+# SUBSTR {: #substr }
+
+Функция `SUBSTR` извлекает подстроку из строки *string*, начиная с позиции
+*from*, длиной *count* символов.
+
+Нумерация символов в строке *string* начинается с единицы. Если длина
+*count* не указана, конец подстроки будет совпадать с концом строки
+*string*.
+
+!!! note "Примечание"
+    *from* и *count* — результаты [выражений](#expression) типа [UNSIGNED].
+
+[UNSIGNED]: ../sql_types.md#unsigned
+
+## Синтаксис {: #syntax }
+
+![SUBSTR](../../images/ebnf/substr.svg)
+
+### Выражение {: #expression }
+
+??? note "Диаграмма"
+    ![Expression](../../images/ebnf/expression.svg)
+
+### Литерал {: #literal }
+
+??? note "Диаграмма"
+    ![Literal](../../images/ebnf/literal.svg)
+
+## Примеры {: #examples }
+
+```title="Запрос VALUES с функцией SUBSTR и параметром <i>from</i>"
+picodata> VALUES ( SUBSTR('picodata', 3) );
++----------+
+| COLUMN_1 |
++==========+
+| "codata" |
++----------+
+(1 rows)
+
+```
+
+```title="Запрос VALUES с функцией SUBSTR и параметрами <i>from</i> и <i>count</i>"
+picodata> VALUES ( SUBSTR('picodata', 3, 4) );
++----------+
+| COLUMN_1 |
++==========+
+| "coda"   |
++----------+
+(1 rows)
+```
diff --git a/docs/sql_index.md b/docs/sql_index.md
index b9e1dbc96ad7be2aba52b99073d4e20f3f696520..a1c28bbdcd2feb4338bf1a27990208562fa9cfcc 100644
--- a/docs/sql_index.md
+++ b/docs/sql_index.md
@@ -45,6 +45,7 @@
 * [Агрегатные функции](reference/sql/aggregate.md)
 * [CASE](reference/sql/case.md)
 * [CAST](reference/sql/cast.md)
+* [SUBSTR](reference/sql/substr.md)
 * [TRIM](reference/sql/trim.md)
 
 ### Дата и время {: #date_and_time }
diff --git a/mkdocs.yml b/mkdocs.yml
index 5d613aec149c630509172a26a176339178d76571..025b56f33e1b148e591902d25e068a8f680e4b14 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -91,6 +91,7 @@ nav:
         - reference/sql/aggregate.md
         - reference/sql/case.md
         - reference/sql/cast.md
+        - reference/sql/substr.md
         - reference/sql/trim.md
         - Дата и время:
           - reference/sql/current_date.md