如何在 Redshift 的结果中保留列别名中的大写和小写字母

Posted

技术标签:

【中文标题】如何在 Redshift 的结果中保留列别名中的大写和小写字母【英文标题】:How to keep the upper case and lower case letters in a column alias in the results in Redshift 【发布时间】:2019-02-21 03:16:37 【问题描述】:

在 Redshift 中,当我们将结果导入 TABLEAU 时,我们试图为从查询返回的列提供更有意义的别名,问题是 RedShift 将所有字母转换为小写字母,即来自“事件日期” 然后它返回“事件日期”,关于如何解决这个问题以保持别名的任何想法?

【问题讨论】:

这可能是您使用的 SQL 客户端引起的。您可以尝试使用其他客户端或使用psql 来查看它以原始形式返回吗? 如果您能够手动重命名,您可以在 Tableau 本身中重命名吗? 其中一种解决方案是使用jsonpath,详情见here 【参考方案1】:

不,您不能在 Redshift 中执行此操作。所有列都是小写的。

您只能通过使用强制大写

set describe_field_name_in_uppercase to on;

另请参阅此处https://docs.aws.amazon.com/redshift/latest/dg/r_names.html 的示例,您可以看到大写字符以小写形式返回。它说“标识符不区分大小写,并在数据库中折叠为小写”

您当然可以重命名列以在 Tableau 中包含大写。

【讨论】:

【参考方案2】:

我正在浏览 AWS 文档以了解 redshift,并且看起来 INTCAP 函数可以解决您的用例

供参考 => https://docs.aws.amazon.com/redshift/latest/dg/r_INITCAP.html

简要说明(复制)

INITCAP 函数将字符串中每个单词的首字母变为大写,而任何后续字母变为(或左)小写。因此,了解哪些字符(除了空格字符)用作单词分隔符非常重要。单词分隔符是任何非字母数字字符,包括标点符号、符号和控制字符。以下所有字符都是单词分隔符:

! " # $ % & ' ( ) * + , - . / : ; ?@ [ \ ] ^ _ ` | ~

在您的情况下,您已将字段名称声明为 event_date,它将转换为 Event_Date。

接下来你可以使用REPLACE函数来替换下划线'_'

供参考 => https://docs.aws.amazon.com/redshift/latest/dg/r_REPLACE.html

【讨论】:

谢谢@Bhavesh,这对于列的结果确实很有用,问题是我需要列的标题有大写字母,对此有什么想法吗?【参考方案3】:

你需要放

set describe_field_name_in_uppercase to on; 

在 Tableau 的初始 SQL 中。

【讨论】:

这实际上不起作用,它将列名设置为仅大写,因此在 OP 的示例中:"EVENT DATE"

以上是关于如何在 Redshift 的结果中保留列别名中的大写和小写字母的主要内容,如果未能解决你的问题,请参考以下文章

Amazon Redshift - 横向列别名参考

2020年2月22日-日报

RedShift 中更新语句中的表别名

如何使用 Amazon Redshift 中的临时表列更新现有表中的列?

如何捕获插入到包含标识列的 Redshift 表中的行数?

如何在 Redshift 或 Postgres 的视图中获取列依赖关系?