diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/sql-manual/sql-functions/scalar-functions/other-functions/field.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/sql-manual/sql-functions/scalar-functions/other-functions/field.md index 15afd09f60fc0..e5400faa6fd37 100644 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/sql-manual/sql-functions/scalar-functions/other-functions/field.md +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/sql-manual/sql-functions/scalar-functions/other-functions/field.md @@ -29,6 +29,28 @@ FIELD(, [, ...]) ## 举例 +```sql +-- setup +CREATE TABLE baseall (k1 INT, k7 VARCHAR(64)) +DISTRIBUTED BY HASH(k1) BUCKETS 1 +PROPERTIES ("replication_num" = "1"); + +INSERT INTO baseall VALUES + (1, 'wangjing04'), + (2, 'wangyu14'), + (3, 'yuanyuan06'); + +CREATE TABLE class_test (class_name VARCHAR(64)) +DISTRIBUTED BY HASH(class_name) BUCKETS 1 +PROPERTIES ("replication_num" = "1"); + +INSERT INTO class_test VALUES + ('Suzi'), ('Suzi'), + ('Ben'), ('Ben'), + ('Henry'), ('Henry'), + (NULL); +``` + 直接使用 `FIELD` 查找位置(基于 1 的索引): ```sql @@ -65,6 +87,7 @@ SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Hen +------------+ | class_name | +------------+ +| NULL | | Suzi | | Suzi | | Ben | @@ -88,6 +111,7 @@ SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Hen | Ben | | Suzi | | Suzi | +| NULL | +------------+ ``` @@ -107,4 +131,4 @@ SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Hen | Henry | | Henry | +------------+ -``` \ No newline at end of file +``` diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1/sql-manual/sql-functions/scalar-functions/other-functions/field.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1/sql-manual/sql-functions/scalar-functions/other-functions/field.md index 21bdc6685ccb1..e5400faa6fd37 100644 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1/sql-manual/sql-functions/scalar-functions/other-functions/field.md +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1/sql-manual/sql-functions/scalar-functions/other-functions/field.md @@ -29,6 +29,42 @@ FIELD(, [, ...]) ## 举例 +```sql +-- setup +CREATE TABLE baseall (k1 INT, k7 VARCHAR(64)) +DISTRIBUTED BY HASH(k1) BUCKETS 1 +PROPERTIES ("replication_num" = "1"); + +INSERT INTO baseall VALUES + (1, 'wangjing04'), + (2, 'wangyu14'), + (3, 'yuanyuan06'); + +CREATE TABLE class_test (class_name VARCHAR(64)) +DISTRIBUTED BY HASH(class_name) BUCKETS 1 +PROPERTIES ("replication_num" = "1"); + +INSERT INTO class_test VALUES + ('Suzi'), ('Suzi'), + ('Ben'), ('Ben'), + ('Henry'), ('Henry'), + (NULL); +``` + +直接使用 `FIELD` 查找位置(基于 1 的索引): + +```sql +SELECT FIELD(2, 3, 1, 2, 5); +``` + +```text ++----------------------+ +| FIELD(2, 3, 1, 2, 5) | ++----------------------+ +| 3 | ++----------------------+ +``` + ```sql SELECT k1, k7 FROM baseall WHERE k1 IN (1,2,3) ORDER BY FIELD(k1,2,1,3); ``` @@ -51,6 +87,7 @@ SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Hen +------------+ | class_name | +------------+ +| NULL | | Suzi | | Suzi | | Ben | @@ -74,6 +111,7 @@ SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Hen | Ben | | Suzi | | Suzi | +| NULL | +------------+ ``` @@ -93,4 +131,4 @@ SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Hen | Henry | | Henry | +------------+ -``` \ No newline at end of file +``` diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-3.x/sql-manual/sql-functions/scalar-functions/other-functions/field.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-3.x/sql-manual/sql-functions/scalar-functions/other-functions/field.md index 21bdc6685ccb1..e5400faa6fd37 100644 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/version-3.x/sql-manual/sql-functions/scalar-functions/other-functions/field.md +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-3.x/sql-manual/sql-functions/scalar-functions/other-functions/field.md @@ -29,6 +29,42 @@ FIELD(, [, ...]) ## 举例 +```sql +-- setup +CREATE TABLE baseall (k1 INT, k7 VARCHAR(64)) +DISTRIBUTED BY HASH(k1) BUCKETS 1 +PROPERTIES ("replication_num" = "1"); + +INSERT INTO baseall VALUES + (1, 'wangjing04'), + (2, 'wangyu14'), + (3, 'yuanyuan06'); + +CREATE TABLE class_test (class_name VARCHAR(64)) +DISTRIBUTED BY HASH(class_name) BUCKETS 1 +PROPERTIES ("replication_num" = "1"); + +INSERT INTO class_test VALUES + ('Suzi'), ('Suzi'), + ('Ben'), ('Ben'), + ('Henry'), ('Henry'), + (NULL); +``` + +直接使用 `FIELD` 查找位置(基于 1 的索引): + +```sql +SELECT FIELD(2, 3, 1, 2, 5); +``` + +```text ++----------------------+ +| FIELD(2, 3, 1, 2, 5) | ++----------------------+ +| 3 | ++----------------------+ +``` + ```sql SELECT k1, k7 FROM baseall WHERE k1 IN (1,2,3) ORDER BY FIELD(k1,2,1,3); ``` @@ -51,6 +87,7 @@ SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Hen +------------+ | class_name | +------------+ +| NULL | | Suzi | | Suzi | | Ben | @@ -74,6 +111,7 @@ SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Hen | Ben | | Suzi | | Suzi | +| NULL | +------------+ ``` @@ -93,4 +131,4 @@ SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Hen | Henry | | Henry | +------------+ -``` \ No newline at end of file +``` diff --git a/versioned_docs/version-2.1/sql-manual/sql-functions/scalar-functions/other-functions/field.md b/versioned_docs/version-2.1/sql-manual/sql-functions/scalar-functions/other-functions/field.md index d7b5b3cc0fca2..630f521217558 100644 --- a/versioned_docs/version-2.1/sql-manual/sql-functions/scalar-functions/other-functions/field.md +++ b/versioned_docs/version-2.1/sql-manual/sql-functions/scalar-functions/other-functions/field.md @@ -32,6 +32,28 @@ FIELD(, [, ...]) ## Examples +```sql +-- setup +CREATE TABLE baseall (k1 INT, k7 VARCHAR(64)) +DISTRIBUTED BY HASH(k1) BUCKETS 1 +PROPERTIES ("replication_num" = "1"); + +INSERT INTO baseall VALUES + (1, 'wangjing04'), + (2, 'wangyu14'), + (3, 'yuanyuan06'); + +CREATE TABLE class_test (class_name VARCHAR(64)) +DISTRIBUTED BY HASH(class_name) BUCKETS 1 +PROPERTIES ("replication_num" = "1"); + +INSERT INTO class_test VALUES + ('Suzi'), ('Suzi'), + ('Ben'), ('Ben'), + ('Henry'), ('Henry'), + (NULL); +``` + ```sql SELECT FIELD(2, 3, 1, 2, 5); ``` @@ -58,6 +80,8 @@ SELECT k1, k7 FROM baseall WHERE k1 IN (1,2,3) ORDER BY FIELD(k1, 2, 1, 3); +------+------------+ ``` +Custom string ordering. `FIELD` returns `0` for values not in the list — including `NULL`, which is why the `NULL` row sorts to the top in the ascending default: + ```sql SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Henry'); ``` @@ -66,6 +90,47 @@ SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Hen +------------+ | class_name | +------------+ +| NULL | +| Suzi | +| Suzi | +| Ben | +| Ben | +| Henry | +| Henry | ++------------+ +``` + +Descending — `NULL` (FIELD = 0) is now last: + +```sql +SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Henry') DESC; +``` + +```text ++------------+ +| class_name | ++------------+ +| Henry | +| Henry | +| Ben | +| Ben | +| Suzi | +| Suzi | +| NULL | ++------------+ +``` + +You can also use `NULLS FIRST` / `NULLS LAST` to control `NULL` placement independently of the sort direction: + +```sql +SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Henry') NULLS FIRST; +``` + +```text ++------------+ +| class_name | ++------------+ +| NULL | | Suzi | | Suzi | | Ben | @@ -73,4 +138,4 @@ SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Hen | Henry | | Henry | +------------+ -``` \ No newline at end of file +``` diff --git a/versioned_docs/version-3.x/sql-manual/sql-functions/scalar-functions/other-functions/field.md b/versioned_docs/version-3.x/sql-manual/sql-functions/scalar-functions/other-functions/field.md index d7b5b3cc0fca2..630f521217558 100644 --- a/versioned_docs/version-3.x/sql-manual/sql-functions/scalar-functions/other-functions/field.md +++ b/versioned_docs/version-3.x/sql-manual/sql-functions/scalar-functions/other-functions/field.md @@ -32,6 +32,28 @@ FIELD(, [, ...]) ## Examples +```sql +-- setup +CREATE TABLE baseall (k1 INT, k7 VARCHAR(64)) +DISTRIBUTED BY HASH(k1) BUCKETS 1 +PROPERTIES ("replication_num" = "1"); + +INSERT INTO baseall VALUES + (1, 'wangjing04'), + (2, 'wangyu14'), + (3, 'yuanyuan06'); + +CREATE TABLE class_test (class_name VARCHAR(64)) +DISTRIBUTED BY HASH(class_name) BUCKETS 1 +PROPERTIES ("replication_num" = "1"); + +INSERT INTO class_test VALUES + ('Suzi'), ('Suzi'), + ('Ben'), ('Ben'), + ('Henry'), ('Henry'), + (NULL); +``` + ```sql SELECT FIELD(2, 3, 1, 2, 5); ``` @@ -58,6 +80,8 @@ SELECT k1, k7 FROM baseall WHERE k1 IN (1,2,3) ORDER BY FIELD(k1, 2, 1, 3); +------+------------+ ``` +Custom string ordering. `FIELD` returns `0` for values not in the list — including `NULL`, which is why the `NULL` row sorts to the top in the ascending default: + ```sql SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Henry'); ``` @@ -66,6 +90,47 @@ SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Hen +------------+ | class_name | +------------+ +| NULL | +| Suzi | +| Suzi | +| Ben | +| Ben | +| Henry | +| Henry | ++------------+ +``` + +Descending — `NULL` (FIELD = 0) is now last: + +```sql +SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Henry') DESC; +``` + +```text ++------------+ +| class_name | ++------------+ +| Henry | +| Henry | +| Ben | +| Ben | +| Suzi | +| Suzi | +| NULL | ++------------+ +``` + +You can also use `NULLS FIRST` / `NULLS LAST` to control `NULL` placement independently of the sort direction: + +```sql +SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Henry') NULLS FIRST; +``` + +```text ++------------+ +| class_name | ++------------+ +| NULL | | Suzi | | Suzi | | Ben | @@ -73,4 +138,4 @@ SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Hen | Henry | | Henry | +------------+ -``` \ No newline at end of file +```