记录一条 SQL 语句
date
Aug 4, 2023
slug
sql-coalesce-md5-concat_ws-case-when-end
status
Published
tags
MySQL
summary
COALESCE、MD5、CONCAT_WS、CASE WHEN
type
Post
Created Time
Oct 28, 2023 01:45 PM
Updated Time
Oct 28, 2023 01:45 PM
AI summary
这篇博客介绍了一条 SQL 语句,其中用到了三个 SQL 函数和一个条件表达式。COALESCE 函数用于返回参数列表中的第一个非-NULL 表达式,MD5 函数用于计算一个字符串的 MD5 哈希值,CONCAT_WS 函数用于将多个字符串连接成一个字符串,并用指定的分隔符分隔每个字符串,CASE WHEN 语句用于根据条件执行不同的操作。这篇博客还介绍了这些函数的语法和用例,并提供了一些示例来说明如何在 SQL 查询中使用它们。
Status
这两天,在做业务的时候,写出了这样的 SQL 语句,其中用到了三个 SQL 函数和一个条件表达式。
COALESCE
COALESCE 是一种 SQL 函数,用于返回参数列表中的第一个非-NULL 表达式。如果所有表达式的值都为 NULL,则返回 NULL。
COALESCE 函数的语法如下:
其中,value1 - valueN 是要检查的表达式或列名。COALESCE 函数按照参数列表中的顺序逐个检查表达式,返回第一个非-NULL 值。如果所有参数的值都为 NULL,则 COALESCE 函数返回 NULL。
COALESCE 函数可以用于多个列或表达式的比较,通常用于在查询中返回一个非-NULL 值,以便提高查询结果的完整性和可读性。以下是 COALESCE 函数的一些用例:
- 选择两个表中具有相同 ID 的行中具有非-NULL 值的列:
- 检查多个列并返回第一个非-NULL 值:
- 用 COALESCE 函数更新表中的空值:
需要说明的是,空字符串会被视为非空值,如果你希望在描述字段为空字符串时返回非空值,你可以调整查询逻辑来适应你的需求。例如,你可以使用
CASE
表达式来处理这种情况,并返回一个特定的默认值。MD5
MD5 是一种哈希函数,用于将一段文本转换为一个固定长度的、唯一的哈希值。在 SQL 中,MD5 函数可以用于计算一个字符串的 MD5 哈希值。
MD5 函数的语法如下:
其中,string 是要计算哈希值的字符串。MD5 函数返回一个 32 位的十六进制数字,表示字符串的 MD5 哈希值。例如,对于字符串 "hello",MD5 函数的返回值是 "5d41402abc4b2a76b9719d911017c592"。
在 SQL 中,MD5 函数通常用于加密密码等敏感信息。例如,可以使用 MD5 函数将用户输入的密码转换为哈希值,然后将哈希值存储在数据库中。当用户登录时,可以将用户输入的密码再次转换为哈希值,并与数据库中存储的哈希值进行比较,以验证密码是否正确。
除了加密密码之外,MD5 函数还可以用于数据完整性检查。例如,在上面的 SQL 语句中,MD5 函数用于比较两个记录的各个字段是否相同。如果两个记录的 MD5 值相同,则说明它们的字段值相同;否则,它们的字段值不同。
需要注意的是,MD5 函数是单向哈希函数,无法通过哈希值反推出原始字符串。因此,一旦字符串被哈希,就无法恢复原始数据。此外,由于 MD5 函数是单向函数,因此可能存在哈希碰撞的情况,即不同的字符串可能具有相同的哈希值。因此,在实际应用中,需要根据具体情况选择合适的哈希函数,并采取其他安全措施来保护敏感数据的安全。
CONCAT_WS
CONCAT_WS 是一种 SQL 函数,用于将多个字符串连接成一个字符串,并用指定的分隔符分隔每个字符串。与 CONCAT 函数不同的是,CONCAT_WS 函数允许指定分隔符,这样可以更灵活地处理字符串连接的需求。
CONCAT_WS 函数的语法如下:
其中,separator 是分隔符,用于将多个字符串连接起来;str1 - strN 是要连接的字符串。
CONCAT_WS 函数会将分隔符插入到每个字符串之间,然后将它们连接成一个字符串。如果任何一个参数的值为 NULL,则它将被忽略。如果所有参数的值都为 NULL,则 CONCAT_WS 函数返回 NULL。
以下是 CONCAT_WS 函数的一些用例:
- 连接多个字符串,并用逗号分隔:
结果为:
- 连接多个字符串,并用空格分隔:
结果为:
- 连接多个字符串,并用指定的分隔符分隔:
结果为:
CASE WHEN …
用于根据条件执行不同的操作。它类似于程序语言中的条件语句(如 if-else 语句),但可以在 SQL 查询中进行条件判断和分支操作。
CASE WHEN 语句的基本语法如下:
其中,condition1 - conditionN 是要判断的条件,可以是任意的表达式。如果条件成立,则执行相应的操作;否则,继续判断下一个条件,直到找到一个条件成立或者所有条件都不成立。如果所有条件都不成立,则返回 default_result。
以下是一个简单的 CASE WHEN 语句的示例:
在上面的示例中,根据学生的分数计算出他们的成绩等级,并将结果显示在查询结果中。
CASE WHEN 语句还可以嵌套,用于处理更复杂的条件分支逻辑。以下是一个嵌套 CASE WHEN 语句的示例:
在上面的示例中,根据人员的性别和年龄计算出他们的状态,并将结果显示在查询结果中。