MySQL 字面量

一、MySQL 字面量 介绍

字面量是表示/表达不变值的符号。在 MySQL 中,字面量类似于常量。我们可以在声明变量或执行SQL时使用字面量。

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

以下是字面量的类型:

  1. 字符串字面量
  2. 数字字面量
  3. 日期和时间字面量
  4. 十六进制字面量
  5. 位值字面量
  6. 布尔字面量
  7. 空值

二、字符串字面量

MySQL中的字符串是用单引号(')或双引号(")括起来的一系列字符或字节。例如,'first string'和"second string"都是一样的。字节串称为一个二进制字符串。每个二进制字符串都包含一个字符集和一个排序规则。

让我们借助一个例子来理解它。首先,我们将创建一个名为“ student_info ”的表,其中包含以下数据:

示例

如果我们想得到名字叫 Joseph 的学生代码和电话号码,执行下面的语句:

mysql> SELECT stud_code, phone FROM student_info WHERE stud_name = 'Joseph';  
OR,  
mysql> SELECT stud_code, phone FROM student_info WHERE stud_name = "Joseph";  

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

字符串字面量也可以与特殊字符转义序列一起使用。这些特殊字符以表格形式汇总如下:

转义字符 说明
\0 它代表 ASCII NULL 字符。
\b 它代表一个退格字符。
\n 它代表一个换行符。
\r 它代表回车符。
\t 它代表制表符。
\\ 它表示反斜杠 (\) 字符。
\% 它代表一个 % 字符。
\_ 它代表一个反斜杠字符。

三、数字字面量

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

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

示例

如果我们要获取分数>+80的学生姓名、学科和分数,执行以下语句: 

mysql> SELECT stud_name, subject, marks FROM student_info WHERE marks > +80;  

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

四、日期和时间字面量

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

下表解释了MySQL中date 值的格式:

日期格式 说明
'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值的格式: 

日期时间格式 说明
'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”的表,其中包含以下数据: 

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

mysql> SELECT Order_ID, Product_Name, DATE_FORMAT(Order_Date,'%d--%m--%y') as new_date_formate FROM orders;

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

示例2

mysql> SELECT Order_ID, Product_Name, DATE_FORMAT(Order_Date,'%d%m%y 11:30:45') as new_date_formate FROM orders;  

输出结果为:

五、十六进制字面量

在编号系统中,十六进制可以表示为以 16 为基数的整数。十六进制字面量可以写成以下术语:

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

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

下面的例子解释了合法和非法的十六进制字面量:

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

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

示例

下面的例子解释得更清楚:

mysql> SELECT 0xD6+0;  
mysql> SELECT HEX('javatpoint');  

输出结果为:

六、布尔字面量

MySQL 中的布尔文字总是以 1 或 0 值计算。这里,1 代表真,0 代表假常数。

让我们通过下面的例子来理解它:

mysql> SELECT TRUE, true, FALSE, false;  

输出结果为:

七、位值字面量

MySQL 中的位值字面量可以写为 b'val' 或 0bval 表示法。这里,val 是一个包含 0 和 1 的二进制值,b 的任何前导值的字母大小写都无关紧要。前导 0b 值区分大小写,因此我们不能将其写为 0B。

下面的例子解释了合法和非法的位值字面量:

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

示例

下面的例子有助于清楚地理解它: 

mysql> SET @v1 = b'1100011', @v2 = b'1100001'+0, @v3 = CAST(b'1100001' AS UNSIGNED);  

输出结果为:

八、NULL值

它代表没有数据。它不区分大小写,这意味着我们可以用任何语言编写NULL值。

热门文章

优秀文章