SQLIte MAX vs Postgresql GREATEST,带字符串

问题描述 投票:0回答:2

根据其他一些帖子,在SQLite中max()函数相当于Postgresql的GREATEST()函数。有人可以用字符串解释SQlite max函数的奇怪行为:

    select max ('rb','VISA', 'Visa', 'Visa Card1', 'VISA VISA Card', 'Visaaa')

返回'rb'。为什么?!?我希望'VISA VISA Card'作为最长的字符串返回结果......

arrays string postgresql sqlite max
2个回答
2
投票

首先,字符串的长度是无关紧要的。它根据整理顺序查看最高值。

其次,默认的整理顺序是BINARY,因此它会查看ASCII值。

第三,使用MAX()作为聚合或标量函数是不相关的,但是使用它会得到相同的结果。

最后,使用GREATEST()时PostgreSQL提供最长字符串的含义也是错误的...


2
投票

它根据字符表示返回最高值作为字节(小写高于大写的值)。

改为select max ('rb','vISA', 'Visa', 'Visa Card1', 'VISA VISA Card', 'Visaaa'),结果是vISA。

Re Comment

有没有办法检索最长的字符串?

如果你想要最长的字符串并假设数据在一个表(在本例中名为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;

结果是 :-

enter image description here

  • 注意,如果有多个具有相同最长长度的字符串,结果将是任意的(来自最长的字符串)。
© www.soinside.com 2019 - 2024. All rights reserved.