如何通过varchar进行排序,在PostgreSQL中使用大小写切换时选择排序顺序

科特罗巴罗斯

这个简单的函数返回title字符串的有序列表

create or replace function testfunction1 ()
returns table (
  id        bigint,
  lang_code tlang_code,
  title     varchar
)
stable language sql as $$
  select 
    id, lang_code, title
  from 
    testable
  order by
    title collate "es_ES";
$$;

select * from testfunction ();

id|lang_code|title           |
--|---------|----------------|
12|DE       |NOCH FESTZULEGEN|
16|DE       |NOCH FESTZULEGEN|
 8|DE       |NOCH FESTZULEGEN|
14|ES       |POR DETERMINAR  |
 6|ES       |POR DETERMINAR  |
10|ES       |POR DETERMINAR  |
 5|EN       |TO BE DETERMINED|
 9|EN       |TO BE DETERMINED|
13|EN       |TO BE DETERMINED|
11|FR       |À DÉTERMINER    |
15|FR       |À DÉTERMINER    |
 7|FR       |À DÉTERMINER    |

但是,当我尝试引入排序规则时,collate我无法获得正确的语法来根据参数设置正确的排序顺序_lang_code

create or replace function testfunction2 (_lang_code tlang_code)
returns table (
    id        bigint,
    lang_code tlang_code,
    title     varchar
)
stable language sql as $$
    select 
        id, lang_code, title
    from 
        testable
    where 
        lang_code = _lang_code
    order by
        title collate 
            case _lang_code
                when 'EN' then "en_US" 
                when 'ES' then "es_ES"
                when 'FR' then "fr_FR"
                when 'DE' then "de_DE"
            end asc;
$$;

错误是SQL Error [42601]: ERROR: syntax error at or near "case"

我在order by子句中的任何地方都没有尝试定位该案例也许“ en_US”不被视为标量值?


where lang_code = _lang_code在Laurenz Albe评论后添加的EDIT 从我的实际问题过渡到此简化示例时,这是一个缺少的子句。

但是,问题case仍然是相同的SQL错误。


正如@Lorenz Albe在评论中指出的那样,它"en_US"是一个标识符,而不是标量值。这样可以防止case-when结构在其任何when分支中返回它因此,没有SQL方法碰巧存在。

解决方法是,使用@doctore的动态SQL或将大小写移动到整个句子都是对问题的微妙但实用的解决方案。

博士学位

考虑到您正在使用该参数_lang_code来选择要过滤的“内部语言”。以下PL / SQL代码允许您collate动态更改最终查询中的:

create or replace function testfunction2 (_lang_code varchar)
returns table (
                  id        bigint,
                  lang_code varchar,
                  title     varchar
              )
language plpgsql
as $$
declare
  final_collate varchar;
  final_query varchar;
begin
  if (_lang_code = 'EN') then
    final_collate := 'en_US';
  elsif (_lang_code = 'ES') then
    final_collate := 'es_ES';
  end if;
  -- Include other use cases you need

  final_query := 'select t.id, t.lang_code, t.title ' ||
                 'from test_table t ' ||
                 'where t.lang_code = ''' || _lang_code || ''' ' ||
                 'order by t.title collate "' || final_collate || '" asc';

  --raise exception 'Final query: %', final_query;

  return query
    execute final_query;
end;$$

现在,您可以执行测试,甚至取消注释raise exception以确保合适的“最终查询”:

select testfunction2('EN')
select testfunction2('ES')

PD:我已经改变的类型_lang_code,并lang_codevarchar,因为我认为tlang_code是一个自定义的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Android中使用枚举切换大小写

来自分类Dev

如何在Java中使用切换大小写来使字符等价?

来自分类Dev

如何按大小写顺序排序?

来自分类Dev

Javascript:当Regex规则匹配空格时,切换大小写未选择相应的值

来自分类Dev

在Ruby中使用正则表达式切换大小写?

来自分类Dev

无法在大小写切换语句中使用if更改if语句

来自分类Dev

使用SwiftLint切换大小写格式问题

来自分类Dev

尝试使用ASCII值切换大小写

来自分类Dev

jQuery:请求JSON信息时如何切换大小写

来自分类Dev

使用切换大小写时,REQUEST_URI不打印var

来自分类Dev

切换elseif切换大小写

来自分类Dev

c# - 如何按大小写顺序对数据表进行排序#

来自分类Dev

如何按大小写和顺序排序?

来自分类Dev

我们如何使用字符串切换大小写

来自分类Dev

在PostgreSQL中使用Model方法的Django Query排序不区分大小写

来自分类Dev

在SQL中使用选择大小写按2条条件排序

来自分类Dev

如何确定XPages视图(面板)是否通过viewColumnHeader排序切换开关进行排序?

来自分类Dev

如何使用COLLATE NOCASE按不区分大小写的字母顺序排序

来自分类Dev

如何使我的postgresql数据库使用不区分大小写的排序规则?

来自分类Dev

如何使用Hibernate Lucene Search进行不区分大小写的排序?

来自分类Dev

如何使用Hibernate Lucene Search对挪威字符(case,Ø和Å)进行不区分大小写的排序?

来自分类Dev

如何使用System.Dynamic.Linq对大小写不敏感进行排序?

来自分类Dev

在System.Linq.Expressions中切换时不使用大小写(但使用默认设置)

来自分类Dev

在jQuery或Javascript中切换按钮选择的大小写

来自分类Dev

切换jQuery或Javascript中按钮选择的大小写

来自分类Dev

在Scala中,进行光滑排序时,如何进行区分大小写的排序

来自分类Dev

按字母顺序使用值对字符串数组进行排序并考虑PHP中值的大小写

来自分类Dev

切换大小写以在单击操作栏主箭头时从“活动”返回到片段

来自分类Dev

传递对象以切换大小写Javascript

Related 相关文章

  1. 1

    在Android中使用枚举切换大小写

  2. 2

    如何在Java中使用切换大小写来使字符等价?

  3. 3

    如何按大小写顺序排序?

  4. 4

    Javascript:当Regex规则匹配空格时,切换大小写未选择相应的值

  5. 5

    在Ruby中使用正则表达式切换大小写?

  6. 6

    无法在大小写切换语句中使用if更改if语句

  7. 7

    使用SwiftLint切换大小写格式问题

  8. 8

    尝试使用ASCII值切换大小写

  9. 9

    jQuery:请求JSON信息时如何切换大小写

  10. 10

    使用切换大小写时,REQUEST_URI不打印var

  11. 11

    切换elseif切换大小写

  12. 12

    c# - 如何按大小写顺序对数据表进行排序#

  13. 13

    如何按大小写和顺序排序?

  14. 14

    我们如何使用字符串切换大小写

  15. 15

    在PostgreSQL中使用Model方法的Django Query排序不区分大小写

  16. 16

    在SQL中使用选择大小写按2条条件排序

  17. 17

    如何确定XPages视图(面板)是否通过viewColumnHeader排序切换开关进行排序?

  18. 18

    如何使用COLLATE NOCASE按不区分大小写的字母顺序排序

  19. 19

    如何使我的postgresql数据库使用不区分大小写的排序规则?

  20. 20

    如何使用Hibernate Lucene Search进行不区分大小写的排序?

  21. 21

    如何使用Hibernate Lucene Search对挪威字符(case,Ø和Å)进行不区分大小写的排序?

  22. 22

    如何使用System.Dynamic.Linq对大小写不敏感进行排序?

  23. 23

    在System.Linq.Expressions中切换时不使用大小写(但使用默认设置)

  24. 24

    在jQuery或Javascript中切换按钮选择的大小写

  25. 25

    切换jQuery或Javascript中按钮选择的大小写

  26. 26

    在Scala中,进行光滑排序时,如何进行区分大小写的排序

  27. 27

    按字母顺序使用值对字符串数组进行排序并考虑PHP中值的大小写

  28. 28

    切换大小写以在单击操作栏主箭头时从“活动”返回到片段

  29. 29

    传递对象以切换大小写Javascript

热门标签

归档