跳转到主要内容
模块 6 · 第 1 课(共 4)课程中的21/57~12 min
模块课程(1/4)

字符串函数

PostgreSQL 有数十个用于操作字符串的函数。在本课中 我们看看实际工作中最常见的:规范化(LOWER/UPPER), 测量 (LENGTH)、组合 (|| / CONCAT)、提取 (SUBSTRING)、 清理 (TRIM)、替换 (REPLACE) 和模式搜索 (LIKE / ILIKE)。

我们将使用的函数

SQL
LOWER('Alice')                -- 'alice'
UPPER('alice')                -- 'ALICE'
LENGTH('alice')               -- 5
'a' || 'b'                    -- 'ab'  (concatenazione)
CONCAT('a', 'b', 'c')         -- 'abc' (versione "funzione")
SUBSTRING('hello' FROM 2 FOR 3) -- 'ell'
TRIM(' alice ')               -- 'alice'
REPLACE('foo bar', 'bar','x') -- 'foo x'

|| 是用于连接字符串的标准 SQL 运算符; CONCAT 是 更宽松(它忽略 NULL,而 || 传播它们: 'a' || NULL → NULL)。

LIKE 和 ILIKE:按模式搜索

LIKE 搜索模式:% = 任何序列,_ = 单个 性格。它区分大小写。 ILIKE 是 PostgreSQL 不区分大小写变体:

SQL
WHERE name LIKE  '%Cuffie%'   -- match esatto "Cuffie"
WHERE name ILIKE '%cuffie%'   -- match anche "CUFFIE", "Cuffie", "cuffie"
WHERE email LIKE  '%@example.com'
WHERE first_name LIKE 'A_____'  -- inizia per A, lungo 6 (A + 5 caratteri)

要在模式内搜索文字 % 或 _,请使用 ESCAPE:

SQL
WHERE titolo LIKE '%50\%%' ESCAPE '\';   -- contiene "50%"

组合功能

函数的组成就像任何语言一样:

SQL
-- Email "normalizzata" e iniziali in maiuscolo:
SELECT LOWER(email) AS email_norm,
       UPPER(SUBSTRING(first_name FROM 1 FOR 1)) || '.'
       || UPPER(SUBSTRING(last_name  FROM 1 FOR 1)) || '.' AS iniziali
FROM   customers
ORDER BY id;

尝试一下

锻炼#sql.m6.l1.e1
尝试:0加载中...

对于每个客户,以小写形式显示电子邮件(电子邮件列),并将全名显示为“名字姓氏”(全名列)。按 ID 订购。

正在加载编辑器...
显示提示

LOWER 第一列,||之间用空格连接。

3 次尝试后可用的解决方案

复习练习

锻炼#sql.m6.l1.e2
尝试:0加载中...

查找名称中包含“笔记本电脑”一词(任何情况)的所有产品。仅显示名称列。按名字订购。

正在加载编辑器...
显示提示

ILIKE 不区分大小写。使用 '%laptop%' 可以匹配任意位置的 'laptop'。

3 次尝试后可用的解决方案