CodeGym /课程 /SQL SELF /字符串操作:LENGTH(), SUBSTRING(), TRIM(), POSITION(), REPLACE(...

字符串操作:LENGTH(), SUBSTRING(), TRIM(), POSITION(), REPLACE(), INITCAP()

SQL SELF
第 6 级 , 课程 0
可用

当你在处理姓名、地址、email 或者其他任何文本时,几乎总是需要做下面两件事之一:

  • 提取字符串的一部分
  • 获取长度
  • 去掉多余的空格
  • 查找/替换片段
  • 格式化输出

比如说,你可能需要:

  • 只显示全名里的姓。
  • 找出姓以“П”开头的学生。
  • 把所有空格替换成下划线。
  • 把姓的首字母变成大写。

这些需求用 PostgreSQL 的字符串函数都能轻松搞定。

LENGTH() — 字符串长度

LENGTH() 函数会返回字符串里的字符数。

语法:

LENGTH(string)

例子:

SELECT name, LENGTH(name) AS name_length
FROM students;
name name_length
Art 3
Song 4
Pal 3

这个很适合用来检查姓名、密码等文本的长度。

SUBSTRING() — 提取字符串的一部分

可以从字符串里拿出子串,比如姓的前三个字符或者 email 的域名。

语法:

SUBSTRING(string FROM start FOR length)
  • start — 第一个字符的位置(从 1 开始)
  • length — 要提取多少个字符

例子 1:姓的前三个字母

SELECT last_name, SUBSTRING(last_name FROM 1 FOR 3) AS prefix
FROM students;
last_name prefix
Song Son
Pal Pal

例子 2:email 的域名

SELECT email, SUBSTRING(email FROM POSITION('@' IN email) + 1) AS domain
FROM students;
email domain
otto@example.com example.com
maria@gmail.com gmail.com

TRIM() — 去掉多余的空格

会把字符串 开头和/或结尾 的空格(还有其他字符)去掉。

语法:

TRIM([LEADING | TRAILING | BOTH] chars FROM string)

但一般都直接这样用:

TRIM(string)

例子:

SELECT '[' || TRIM('   Art   ') || ']' AS cleaned;
cleaned
[Art]

这个在用户手动输入数据(比如前面有空格)时特别有用。

POSITION() — 查找子串

返回子串开始的位置。

语法:

POSITION(substring IN string)

例子:

SELECT email, POSITION('@' IN email) AS at_position
FROM students;
email at_position
otto@example.com 5
anna.pal@gmail.com 9

可以和 SUBSTRING() 一起用来提取字符串的部分内容。

REPLACE() — 替换子串

把所有出现的某个子串替换成另一个。

语法:

REPLACE(string, from_substring, to_substring)

例子:把空格换成下划线

SELECT name, REPLACE(name, ' ', '_') AS fixed_name
FROM students;
name fixed_name
Otto Art Otto_Art
Maria Chi Maria_Chi

INITCAP() — 首字母大写

把字符串变成 每个单词的首字母大写,其他字母小写。

语法:

INITCAP(string)

例子:

SELECT INITCAP('anna pal') AS full_name;
full_name
Anna Pal

很适合用来规范姓名的格式。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION