字面常量是在编程语言中表示固定值的直接值,是程序中的硬代码。它们是在程序中直接出现的常量值,而不是通过变量或表达式计算得到的。
字面常量可以是不同的数据类型,例如整数、浮点数、布尔值、字符串等。
在 MySQL 中,通常你可以将字面常量用于存储过程、函数的参数、SQL 语句中赋值语句、条件比较,如 IF。下面是 MySQL 中三大基本字面量类型:
数字字面量适用于表达数字并可以被定义为十进制数字(300, 30.45 等),十六进制数或者科学计数法表示的数。
十六进制值使用的是传统的表示方法,在它的前面加上 0x。因此 0xA 表示十六进制中的 A,也就是十进制中的 10。
例如:
-- 整数字面常量 mysql> select 42, 0, -10; +----+---+-----+ | 42 | 0 | -10 | +----+---+-----+ | 42 | 0 | -10 | +----+---+-----+ 1 row in set (0.05 sec) -- 浮点数字面常量 mysql> select 3.14, 2.0, -1.5; +------+-----+------+ | 3.14 | 2.0 | -1.5 | +------+-----+------+ | 3.14 | 2.0 | -1.5 | +------+-----+------+ 1 row in set (0.04 sec)
科学计数法(Scientific notation),也称为标准形式或指数表示法,是一种用于表示非常大或非常小的数字的方法。它的基本形式是将一个数字表示为一个有限数量的数字乘以 10 的幂。
科学计数法的一般形式如下:
a × 10^b
其中,a 是一个介于 1 到 10 之间的数字,称为尾数(mantissa),b 是一个整数,称为指数(exponent)。指数表示了尾数需要乘以 10 的次数。
例如,光速的近似值是 299,792,458米/秒,可以使用科学计数法表示为:
2.99792458 × 10^8 m/s
在科学计数法中,指数可以是正数、负数或零,用来表示数字的大小和精度。当指数为正数时,表示一个较大的数字;当指数为负数时,表示一个较小的数字;当指数为零时,表示尾数本身。
科学计数法在科学、工程和计算领域经常使用,特别是当处理非常大或非常小的数字时,可以简化表示和计算,并提高可读性和精度。
一个日期字面常量是一个类似于 “YYYY-MM-DD” 这样的字符串,或者在 DATATIME 中以 “YYYY-MM-DD HH24:MI:SS” 这样的格式表示。
因此, “1999-12-31 23:59:59” 表示上个世纪的最后一秒钟。
例如:
mysql> select '1999-12-31 23:59:59', year('1999-12-31 23:59:59'); +---------------------+-----------------------------+ | 1999-12-31 23:59:59 | year('1999-12-31 23:59:59') | +---------------------+-----------------------------+ | 1999-12-31 23:59:59 | 1999 | +---------------------+-----------------------------+ 1 row in set (0.04 sec)
上面例子中,通过 year() 函数获取日期的年份。
字符常量是任何被简单的包含在单引号中的值,如:'A'。
如果你要在单引号中表示另一对单引号,那么你可以用两个双引号或者加上前缀的反斜杠(\')进行转意来表示他们。你也可以用双引号来闭合一个字符串,并且你可以使用转意序列字符(\t 表示 tab,\n 表示换行,\\表示反斜杠,等等)。
例如:
mysql> select 'hello world' from dual; +-------------+ | hello world | +-------------+ | hello world | +-------------+ 1 row in set (0.04 sec) mysql> select '\'hello world\'' from dual; +---------------+ | 'hello world' | +---------------+ | 'hello world' | +---------------+ 1 row in set (0.02 sec) mysql> select '"hello world"' from dual; +---------------+ | "hello world" | +---------------+ | "hello world" | +---------------+ 1 row in set (0.02 sec) mysql> select '"hello \t world"' from dual; +----------------+ | "hello world" | +----------------+ | "hello world" | +----------------+ 1 row in set (0.04 sec)