4.3 常量
常量也称为文字值或标量值,是表示一个特定数据值的符号。常量的格式取决于它所表示的值的数据类型。一个常量通常有一种数据类型和长度,这二者取决于常量格式。根据数据类型的不同,常量可以分为如下几类:数字常量、字符串常量、日期和时间常量和符号常量。本节将介绍这些不同常量的表示方法。
4.3.1 数字常量
数字常量包括有符号和无符号的整数、定点数和浮点小数。
integer常量由没有用引号括起来,并且不包含小数点的数字字符串来表示。integer常量必须全部为数字,它们不能包含小数。
decimal常量由没有用引号括起来,并且包含小数点的数字字符串来表示。
float和real常量使用科学记数法来表示。
若要指示一个数是正数还是负数,对数值常量应用“+”或“-”一元运算符。这将创建一个表示有符号数字值的表达式。如果没有应用+或-一元运算符,数值常量将使用正数。
money常量以前缀为可选的小数点和可选的货币符号的数字字符串来表示。money常量不使用引号括起来。
4.3.2 字符串常量
1.字符串常量
字符串常量括在单引号内并包含字母和数字字符(a~z、A~Z和0~9)以及特殊字符,如感叹号(!)、at符(@)和数字号(#)。将为字符串常量分配当前数据库的默认排序规则,除非使用COLLATE子句为其指定了排序规则。用户输入的字符串通过计算机的代码页计算,如有必要,将被转换为数据库的默认代码页。
2.Unicode字符串
Unicode字符串的格式与普通字符串相似,但它前面有一个N标识符(N代表SQL92标准中的区域语言)。N前缀必须是大写字母。例如,'Michél'是字符串常量而N'Michél'则是Unicode常量。Unicode常量被解释为Unicode数据,并且不使用代码页进行计算。Unicode常量有排序规则,该排序规则主要用于控制比较和如何区分大小写。为Unicode常量分配当前数据库的默认排序规则,除非使用COLLATE子句为其指定了排序规则。对于字符数据,存储Unicode数据时每个字符使用2个字节,而不是每个字符1个字节。
4.3.3 日期和时间常量
日期和时间常量使用特定格式的字符日期值来表示,并用单引号括起来。
4.3.4 符号常量
1.分隔符
在T-SQL中,双引号有两层意思。除了引用字符串之外,双引号还能够用来做分隔符,也就是所谓的定界表示符(delimited identifier)。分割标识符是标识的一种特殊类型,通常将保留当作标识符并且用数据库对象的名称命名空间。
提示
单引号和双引号之间的区别就在于前者适用于SQL92标准。标识符这种情况中,这种标准用于区分常规和分割标识符。关键的两点就是分割标识符是用双引号引出的,而且还区分大小写(T-SQL还支持用方括号代替双引号)。双引号只用于分割字符串。一般来说,分割标识符说明了标识符的规格,对保留的也起到了同样的作用。分割标识符还可以让你不用名字(标识符、变量名),这些名字也可以在将来的SQL标准中用作保留的。并且,分割标识符还可能在标识符名中包含不合规定的字符,如空格。
在T-SQL中,双引号是用来定义SET语句的QUOTED_IDENTIFIER选项的。如果这一选项设为ON(即默认值),那么双引号中的标识符就被定义成了分割标识符。在这种情况下,双引号就不能用于分割字符串。
技巧
说明一个T-SQL语句的注释有两种方法。一种方法是使用一对字符/**/,注释就是对附着在里面的内容进行说明。这种情况下,注释内容可能扩展成很多行。另一种方法是使用字符“--”(两个连字符)表示当前行剩下的就是注释(两个连字符就符合ANSI SQL标准,而/和/是T-SQL的扩展名。
2.标识符
在T-SQL中,标识符用于识别数据库对象如数据库、表和索引。它们通过字符串表示出来,这些字符串的长度可以达到128个字符,还包含字母、数字或者下面的字符:“_”“@”“#”和“$”。每个名称都必须以一个字母或者以下字符中的一个开头:“_”“@”或“#”。“#”在以它开头的表名或存储程序名表示一个临时对象,而以“@”开头的标识符则表示一个变量。就像是之前提到的,这些规则并不适用于分割标识符(也叫作引用标识符),分割标识符可以将这些字符包含在内或者以其中的任意字符开头(而不是分割符自己)。