使用<或>进行SQL字符串比较

3

我正在学习数据库考试,其中一道练习要求我判断是否可以在这个数据库中进行INSERT[...]操作:

CREATE TABLE A (
   a1 INTEGER NOT NULL PRIMARY KEY,
   a2 CHAR(10) NOT NULL,
   a3 CHAR(10) NOT NULL,
   CHECK(a2<a3)
)

那个最后一位 (a2<a3) 是什么意思?它是一个字符串,所以它比较的是长度还是其他什么?需要帮忙的话请告诉我,谢谢。

我的猜测是它是一个约束条件,意味着a2的值必须小于a3的值。尝试插入一个不符合该条件的记录。 - Dan Bracuk
2
你使用的是哪个数据库? - Bob Jarvis - Слава Україні
3
这是“词典序”的排序方法,就像在文本列上使用“Order By”时一样。例如,“AA”排在“AB”前面。 - Tim Schmelter
1个回答

3

insert into A values (0, 'a', 'b');可以执行

insert into A values (1, 'b', 'a');会抛出异常

CHECK(a2 < a3)只允许插入a2的值在字母表中排在a3之前,即a2小于a3。

你可以尝试执行select ascii('a');来查看字符的ASCII码(这里是97)。

编辑: 请注意,像A这样的大写字母和小写字母a具有不同的ASCII码。

链接到ASCII码表


4
这个答案很接近。大多数数据库都为字符串值分配了所谓的“排序规则(collation)”。排序规则告诉数据库如何比较字符串值。默认的排序规则通常是ASCII顺序,但绝对存在其他选项。您应该查阅正在使用的数据库文档以获取更多信息。 - Gordon Linoff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接