语句(常量)

17 Mar 2025 | 6 分钟阅读

语句(常量)是表示/表达一个不变值的**符号**或概念。在 MySQL 中,语句(常量)类似于常量。我们可以在声明变量或执行查询时使用语句(常量)。

在本节中,我们将描述不同类型的语句(常量)以及如何在 MySQL 语句中使用它们。

以下是语句(常量)的类型

  1. 字符串字面量
  2. 数字字面量
  3. 日期和时间语句(常量)
  4. 十六进制字面量
  5. 位值语句(常量)
  6. 布尔字面量
  7. NULL 值

字符串字面量

MySQL 中的字符串是包含在**单引号** (') 或**双引号** (") 中的字符或字节序列。例如,'first string' 和 "second string" 是相同的。字节序列称为二进制字符串。每个二进制字符串都有一个字符集和一个排序规则。

让我们通过一个例子来理解这一点。首先,我们将创建一个名为“**student_info**”的表,其中包含以下数据

MySQL Programming Literals

示例

如果我们想获取名字为 Joseph 的学生的学号和电话号码,请执行以下语句

输出

它将给出以下输出,我们可以看到两个查询给出相同的结果,无论使用单引号还是双引号。

MySQL Programming Literals

字符串语句(常量)也可以与特殊字符转义序列一起使用。这些特殊字符汇总在下面的表格中

转义序列序列表示的字符
\0表示 ASCII NULL 字符。
\b表示退格字符。
\n表示换行符。
\r表示回车符。
\t表示制表符。
\\表示反斜杠(\)字符。
\%表示 % 字符。
\_表示反斜杠字符。

数字字面量

MySQL 中的数字语句(常量)用于指定两种类型的字面值:**精确值**(整数和小数)和**近似值**(浮点数)语句(常量)。它可以是正值或负值。精确值可以有整数、分数或两者都有。近似值主要用于包含尾数和指数的科学计数法。

数字语句(常量)描述
Integer它表示为没有小数部分的数字序列。如果数字前面带有 - 号,则为负整数。如果数字前面带有 + 号,则为正整数。如果数字没有任何符号,则假定为正整数。**例如**,55、+55、-55 都是整数。
十进制它表示为带有小数部分的数字序列。换句话说,它包含一个整数部分加上一个分数部分,它们由点 (.) 运算符或小数点分隔。它可以是整数和非整数。它以精确的数字形式产生计算。**例如**,325.90、355.6 是小数。
浮点数它是一个包含浮点数的数字。这意味着小数点前后的数字没有固定位数。它包含两种数据类型:float 和 double,它们产生近似值。**例如**,2.36E0、0.005 和 -2,328.679 都是浮点数。

示例

如果我们想获取名字、科目和分数大于 +80 的学生,请执行以下语句

输出

它将给出以下输出,我们可以看到所有分数大于 +80 的学生姓名。

MySQL Programming Literals

日期和时间语句(常量)

MySQL 中的**日期和时间**值可以表示为**带引号的字符串或数字格式**,这取决于确切的值和一些因素。例如,MySQL 将 '2020-09-22'、'20200922' 和 20200922 都解释为有效日期。

下表解释了 MySQL 中**日期值**的格式

日期格式描述
'YYYY-MM-DD' 或 'YY-MM-DD'它以字符串格式表示日期,其中标点符号可用作日期部分之间的分隔符。**例如**,'2020-03-31'、'2020/03/31' 和 '2020^03^31' 都是相同的日期值。
'YYYYMMDD' 或 'YYMMDD'它以字符串格式表示日期,日期部分之间没有任何标点符号或分隔符。**例如**,'20200422' 和 '200522' 被解释为 '2007-05-23',但 '071342' 是非法的,并且变成 '0000-00-00' 日期值。
YYYYMMDD 或 YYMMDD它以数字格式表示日期。**例如**,20200305 和 200305 被解释为 '2020-03-05' 日期值。

下表解释了 MySQL 中**时间值**的格式

时间格式描述
'D hh:mm:ss'、'hh:mm:ss'、'hh:mm'、'D hh:mm'、'D hh' 或 'ss'它以字符串格式表示时间,其中标点符号可用作时间部分之间的分隔符。这里,D 表示天,其值从 0 到 34。**例如**,'22 10:11:12'、'10:11:12' 是时间值。
'hhmmss'它以字符串格式表示时间,时间部分之间没有任何标点符号或分隔符。**例如**,'101211' 被解释为 '10:12:11',但 '109813' 是非法的,并且变成 '00:00:00' 时间值。
hhmmss、ss 或 mmss,它以数字格式表示时间。**例如**,101211 被解释为 '10:12:11' 时间值。

下表解释了 MySQL 中**datetime 和 timestamp** 值的格式

DateTime 格式描述
'YYYY-MM-DD hh:mm:ss' 或 'YY-MM-DD hh:mm:ss'它以字符串格式表示日期和时间,其中标点符号可用作日期和时间部分之间的分隔符。**例如**,'2020-05-31 12:30:45'、'2020/05/31 12*30*45' 和 '2020@05@31 12^30^45' 都是相同的值。
'YYYYMMDDhhmmss' 或 'YYMMDDhhmmss'它以字符串格式表示日期,日期和时间部分之间没有任何标点符号或分隔符。**例如**,'20070523091528' 和 '070523091528' 被解释为 '2007-05-23 09:15:28',但 '071122129015' 是非法的,并且变成 '0000-00-00 00:00:00' 日期和时间值。
YYYYMMDDhhmmss 或 YYMMDDhhmmss它以数字格式表示日期和时间。**例如**,20200105142500 和 200105142500 被解释为 '2020-01-05 14:25:00' 日期和时间值。

示例 1

假设我们有一个名为 **"orders"** 的表,其中包含以下数据

MySQL Programming Literals

如果我们想以不同的日期格式获取 Order_ID、Product_Name,请执行以下语句

输出

它将给出以下输出,我们可以看到日期的格式已更改。

MySQL Programming Literals

示例 2

输出

MySQL Programming Literals

十六进制字面量

在数字系统中,十六进制可以表示为基数为 16 的整数。十六进制语句(常量)值可以按以下方式编写

  • x'val'
  • X'val'
  • 0xval

这里,**val** 包含范围为 (0..9 和 A..F) 的十六进制数字。在 0xval 中,前导 0x 是区分大小写的,因此我们不能将其写为 0X'val'。但是,在数字的大小写方面,前导 X 或 0x 对于特定的大小写敏感性无关紧要。

以下示例解释了合法的和非法的十六进制语句(常量)

LegalIllegal (非法的)
x'01BF'
x'01bf'
X'01BF'
X'01bf'
0x01BF
0x01bf
X'0H'(因为 H 不是十六进制数字)
0X0BAF(因为 0X 应写为 0x)

这确保了 X'val' 或 x'val' 的表示法应包含偶数个数字。否则,我们将收到语法错误。可以通过在字符串开头填充零数字来避免此类错误。

示例

以下示例更清楚地解释了这一点

输出

MySQL Programming Literals

布尔字面量

MySQL 中的布尔语句(常量)始终评估为 1 或 0 值。这里,1 表示**真**,0 表示**假**常量。

让我们通过以下示例来理解这一点

输出

MySQL Programming Literals

位值语句(常量)

MySQL 中的位值语句(常量)可以写成 b'val' 或 0bval 格式。这里,val 是一个包含零和一的二进制值,并且任何前导值 b 的大小写无关紧要。前导 0b 值区分大小写,因此我们不能将其写为 0B。

以下示例解释了合法的和非法的位值语句(常量)

LegalIllegal (非法的)
b'0011'
B'0011'
0b0011
b'3'(3 不是二进制数字)
0B11(0B 应写为 0b)

示例

以下示例有助于更清楚地理解这一点

输出

MySQL Programming Literals

空值

表示**无数据**。它不区分大小写,意味着我们可以用任何语言书写 null 语句(常量)。