根据其他一些帖子,在SQLite中max()函数相当于Postgresql的GREATEST()函数。有人可以用字符串解释SQlite max函数的奇怪行为:
select max ('rb','VISA', 'Visa', 'Visa Card1', 'VISA VISA Card', 'Visaaa')
返回'rb'。为什么?!?我希望'VISA VISA Card'作为最长的字符串返回结果......
首先,字符串的长度是无关紧要的。它根据整理顺序查看最高值。
其次,默认的整理顺序是BINARY,因此它会查看ASCII值。
r
的值为162,而V
的值为126,因此r
更高......第三,使用MAX()
作为聚合或标量函数是不相关的,但是使用它会得到相同的结果。
最后,使用GREATEST()时PostgreSQL提供最长字符串的含义也是错误的...
它根据字符表示返回最高值作为字节(小写高于大写的值)。
改为select max ('rb','vISA', 'Visa', 'Visa Card1', 'VISA VISA Card', 'Visaaa')
,结果是vISA。
有没有办法检索最长的字符串?
如果你想要最长的字符串并假设数据在一个表(在本例中名为mystring)的列中(在这种情况下命名为test),那么你可以使用: -
SELECT mystring FROM test ORDER BY length(mystring) DESC LIMIT 1;
EG
DROP TABLE IF EXISTS test;
CREATE TABLE IF NOT EXISTS test (mystring TEXT);
INSERT INTO test VALUES ('rb'),('VISA'),('Visa Card1'),('VISA VISA Card'),('Visaaa');
SELECT mystring FROM test ORDER BY length(mystring) DESC LIMIT 1;
结果是 :-