您的位置:首页 > 数据库

SQL-92标准 中文翻译——概念(字符串)

2009-04-05 17:00 393 查看
字符串数据类型通过其描述符描述。字符串数据类型描述符包括:

- 具体字符串数据类型的名称(CHARACTER或 CHARACTER VARYING; NATIONAL
CHARACTER 和 NATIONAL
CHARACTER VARYING 分别表示为CHARACTER 和 CHARACTER VARYING);

- 字符串数据类型的字符长度或最大长度;

- 字符串数据类型的字符集的目录名称,方案名称,字符集名称;

- 字符串数据类型的排序规则的目录名称,方案名称,排序规则名称。

字符集分为三类:国家或国际标准定义的,实现提供的,应用定义的。所有的字符集,通常包含<space>字符。应用定义的字符集定义为“属于”任何该应用所选取的方案。标准或实现所定义的字符集,标准定义的排序规则和实现定义的使用形式转换,属于每个目录中的信息方案(INFORMATION_SCHEMA)。

<implementation-defined
character repertoire name> SQL_TEXT 指定字符清单名称和隐含的使用形式,该使用形式能够表示<SQL language character>中的每个字符和实现支持字符集中的所有其他字符。

4.2.1 字符串和排序序列

字符串是字符序列,其中的字符来自同一字符表。特定字符串的字符选自某一字符表,该字符表可以显示或隐式指定。字符串具有长度,长度为字符序列中字符的个数。长度大于或等于0。

给定字符表的所有字符串可以相互比较,但受表3“Collating
sequence usage for comparisons”指定的限制。

排序序列(或称为排序规则)是确定在某特定字符表中字符串排序的规则集合。对于每个字符表,有默认的排序序列,但也可定义额外的排序序列。

注:某一列可定义为具有默认的排序序列。如果是在<column reference>中指定<collate clause>,那么列默认的排序序列可能和它的字符表默认排序序列不同。

给定排序序列,两个字符串相同当且仅当根据在子条款8.2 "<comparison predicate>" 中指定的比较规则是相同的。用于特定比较的排序序列在子条款4.2.3 "Rules determining
collating sequence usage"中确定。

关键词NATIONAL CHARACTER用于指定具有特定实现定义字符表的字符串数据类型。提供特别语法(N'string')表示字符表中常量。

字符集通过其描述符描述。字符集描述符包括:

- 字符集或字符表的名称,

- 如果字符集是一个字符表,那么是使用形式的名称,

- 说明字符集中有哪些字符,

- 字符集默认排序规则名称。

对于每个字符集,至少有一个排序规则。排序规则通过其描述符描述。 排序规则描述符包括:

- 排序规则名称,

- 排序规则作用的字符集名称,

- 排序规则是否具有NO PAD 或PAD SPACE 属性,

- 说明排序规则如何执行。

4.2.2 字符串操作

4.2.2.1 字符串操作符及返回值

字符串

<concatenation operator> 是一个操作符‘|’, 返回连接给定次序的字符串操作对象形成的字符串。

<character substring function> 是一个三元函数SUBSTRING,给定字符串的起始位置和长度(均为数字),从该字符串中提取子字符串。当隐含的起始位置和终止位置不全在给定的字符串中时,产生截断。

<fold>是一对函数,用来将给定字符串中所有小写字母转换为大写字母,或将所有大写字母转换为小写字母,只有字符串中包含<simple Latin letter>时才有用。

<form-of-use conversion>是一个函数,调用安装提供的使用形式转换,返回来自给定字符串S1的字符串S2。尽管在该国际标准中没有强制规定,但S2和S1的字符序列必须是同一字符序列,根据不同的使用形式编码。一个典型的使用是将字符串从两个字节UCS转换为一个字节的Latin1,反之亦然。

<trim function>是一个函数,返回将开头或结尾的填充字符移除后的第一个字符串参数。第二个参数表明开头或拖尾或开头和拖尾的填充字符是否移除。第三个参数指定需要移除的填充字符。

<character translation>是一个函数,在两个字符集(可以相同)之间,根据某种多对一或一对多的映射,转换给定字符串中的各个字符。该映射不是该函数的部分,而是某个外部函数,由<translation name>确定。

对于任何字符集对,存在零个或多个转换,转换通过<character
translation>调用。转换由转换描述符描述。转换描述符包括:

- 转换的名称,

- 转换源字符集名称,

- 转换目标字符集名称,

- 转换如何执行的说明。

4.2.2.2 其他字符串操作符

<length expression> 返回给定字符串的长度(整数)。

<position
expression> 确定字符串S1第一次出现在字符串S2的位置。如果S1的长度为0,则对于任何S2,返回1。如果S2中不存在S1,则返回0。

<like predicate> 使用三元运算符LIKE(或相反的NOT LIKE),操作三个字符串,返回布尔值。LIKE确定某一字符串是否“匹配”给定“模式”(模式也是一个字符串)。 在模式中,字符'%'(百分号)和'_'(下划线)具有特殊的含义。可选的第三个参数是只包含一个字符的字符串,被称为“转义字符”。当在该模式中需要百分号和下划线本身(不含特殊意义)时使用。

4.2.3 确定排序序列用法规则

该规则确定对字符串的排序序列用法,基于以下:

- 表达式不涉及列(如常量,宿主变量等)的比较,使用它们的字符表默认排序序列。

注:对字符表默认的排序序列在子条款10.4, "<character set specification>",和子条款11.28, "<character set
definition>"中定义。

- 当涉及列时(如比较两列或比较列和常量),只要涉及的列有默认排序序列,则使用该排序序列。

- 当涉及的列有不同的默认排序序列,需要在表达式中通过<collate clause>显式指定排序序列。

- 表达式中任何排序序列的显式指定,将覆盖默认排序序列。

为了形式化以上内容,<character value
expression>s有coercibility属性。该属性包含Coercible ,Implicit ,No collating sequence 和Explicit 值。<character value
expression>s有Coercible,Implicit或Explicit属性值时,具有排序序列。

由列引用组成的<character value expression>具有Implicit属性值,和列创建时定义的排序序列。由值(除了列,如宿主变量和常量)组成的<character value expression>具有Coercible属性值,和字符表默认排序序列。仅仅包含一个<collate clause>的<character value expression>具有Explicit属性值,和在<collate clause>中定义的排序序列。

注:当coercibility属性值为Coercible 时,排序序列由子条款8.2<comparison
predicate>唯一指定。

下表定义对于一元或多元操作,排序序列和coercibility 属性如何确定。表1,"Collating coercibility rules
for monadic operators",显示对于一元操作符的排序序列和coercibility规则。表2, "Collating coercibility rules for dyadic operators",显式对于二元操作符的排序序列和coercibility规则。表3,"Collating sequence usage for comparisons",显示特殊比较中的排序序列如何确定。

表1 Collating coercibility rules for monadic
operators

Operand Coercibility and
Collating Sequence


Result Coercibility and Collating
Sequence


Coercibility

Collating Sequence

Coercibility

Collating Sequence

Coercible

default

Coercible

default

Implicit

X

Implicit

X

Explicit

X

Explicit

X

No
collating sequence

No
collating sequence

表2 Collating coercibility rules for dyadic
operators

Operand 1 Coercibility and_Collating_Sequence

Operand 2 Coercibility and_Collating_Sequence

Operand 3 Coercibility and_Collating_Sequence

Coercibility

Collating Sequence

Coercibility

Collating Sequence

Coercibility

Collating Sequence

Coercible

default

Coercible

default

Coercible

default

Coercible

default

Implicit

Y

Implicit

Y

Coercible

default

No
collating sequence

No
collating sequence

Coercible

default

Explicit

Y

Explicit

Y

Implicit

X

Coercible

default

Implicit

X

Implicit

X

Implicit

X

Implicit

X

Implicit

X

Implicit

Y !=X

No
collating sequence

Implicit

X

No
collating sequence

No
collating sequence

Implicit

X

Explicit

Y

Explicit

Y

No
collating sequence

Any, except Explicit

Any

No
collating sequence

No
collating sequence

Explicit

X

Explicit

X

Explicit

X

Coercible

default

Explicit

X

Explicit

X

Implicit

Y

Explicit

X

Explicit

X

No
collating sequence

Explicit

X

Explicit

X

Explicit

X

Explicit

X

Explicit

X

Explicit

Y !=X

Not permitted: invalid syntax

表3 Collating sequence usage for comparisons

Comparand
1 Coercibility and Collating Sequence


Comparand
2 Coercibility and Collating Sequence


Collating
Sequence Used For The Comparison


Coercibility

Collating
Sequence


Coercibility

Collating
Sequence


Coercible

default

Coercible

default

default

Coercible

default

Implicit

Y

Y

Coercible

default

No
collating sequence

Not permitted: invalid syntax

Coercible

default

Explicit

Y

Y

Implicit

X

Coercible

default

X

Implicit

X

Implicit

X

X

Implicit

X

Implicit

Y !=X

Not permitted: invalid syntax

Implicit

X

No
collating sequence

Not permitted: invalid syntax

Implicit

X

Explicit

Y

Y

No
collating sequence

Any, except Explicit

Any

Not permitted: invalid syntax

No
collating sequence

Explicit

X

X

Explicit

X

Coercible

default

X

Explicit

X

Implicit

Y

X

Explicit

X

No
collating sequence

X

Explicit

X

Explicit

X

X

Explicit

X

Explicit

Y !=X

Not permitted: invalid syntax

对于n元操作(如<case expression>),有X1, | X2, . . . , n个操作数,考虑X1和X2,然后将结果与X3结合来决定排序序列。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: