【问题标题】:SQLIte MAX vs Postgresql GREATEST, with stringsSQLIte MAX vs Postgresql GREATEST,带字符串
【发布时间】:2018-09-08 23:30:13
【问题描述】:

根据其他一些帖子,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


    【解决方案1】:

    首先,字符串的长度无关紧要。就是按照排序顺序看最大值。

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

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

    最后,PostgreSQL 在使用 GREATEST() 时给出最长字符串的暗示也是错误的......

    【讨论】:

    • 好的,还有其他方法可以检索最长的字符串吗?
    • table 你可以跳过几个圈...sqlfiddle.com/#!5/33d57/8 (添加WHERE rank=0 以获得最长的字符串,或WHERE length_rank=0 AND string_rank=0 只获取一个字符串...)
    【解决方案2】:

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

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

    重新评论

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

    如果您想要最长的字符串并假设数据位于表(在本例中名为 test)的列(在本例中名为 mystring),那么你可以使用:-

    SELECT mystring FROM test ORDER BY length(mystring) DESC LIMIT 1;
    

    例如

    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;
    

    结果:-

    • 请注意,如果存在多个具有相同最长长度的字符串,则结果将是任意的(从最长的字符串开始)。

    【讨论】:

    • 有没有办法检索最长的字符串?
    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 2022-11-14
    • 2012-07-25
    • 2016-04-23
    • 2011-05-02
    • 2016-04-30
    • 1970-01-01
    相关资源
    最近更新 更多