Hum*_*iro 4 postgresql formatting date sql-order-by
问题是使用 to_char 会将按日期排序转换为按 ASCII 排序。例子:
SELECT foo, bar FROM baz ORDER BY foo;
Run Code Online (Sandbox Code Playgroud)
我想使用 to_char 格式化 foo,但这样做会影响顺序:
SELECT to_char(foo,'dd/MM/yyyy') as foo, bar FROM baz ORDER BY foo;
Run Code Online (Sandbox Code Playgroud)
因为 foo 现在是文本类型。有没有办法正确地做到这一点?还是只在代码中?
正确且简单的解决方案是:
SELECT to_char(b.foo,'DD/MM/YYYY') as foo, b.bar
FROM baz b
ORDER BY b.foo;
Run Code Online (Sandbox Code Playgroud)
格式化日期列foo对于查询计划程序来说是一个全新的列,它恰好与表列冲突foo。In ORDER BYandGROUP BY子句输出列名称优先于输入列。非限定名称foo将引用输出列。
要在子句中使用原始表列ORDER BY,只需对列进行表限定即可。
为了清楚起见,我对所有列名称进行了表限定。在这种情况下,仅在条款中需要ORDER BY。表别名b只是为了方便。