- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道对于 PostgreSQL 中的文本字符串,换行符是通过在文本前面附加符号 E
或 e
来统一的:
SELECT E'first\nsecond'
结果:
first
second
但 PostgreSQL 也支持在列名中换行 - 不确定这种做法为什么或有多邪恶,但可以执行以下操作:
CREATE TABLE One("first\nsecond" text);
CREATE TABLE Two("first
second" text);
当您不幸遇到其中之一时,您会发现虽然这些查询有效:
SELECT "first\nsecond" from One;
SELECT "first
second" from Two;
这些不会:
SELECT "first
second" from One;
SELECT "first\nsecond" from Two;
我的问题是:在 PostgreSQL 中有没有一种方法可以统一这些差异,类似于列值的情况?
我试过将 E
放在 "first\nsecond"
列名前面,但不支持。尝试使用 \r\n
代替(我使用的是 Windows)给了我第三种类型的列名,一种只能查询为:
SELECT "first\r\nsecond" FROM Third
最佳答案
列名是标识符,标识符语法的详细信息在:
http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
TL;DR:使用 U&"..."
语法通过它们的 Unicode 代码点将不可打印字符注入(inject)到标识符中,并且没有办法统一 CR,LF
与 LF
单独。
我们被允许在标识符中使用 Unicode 转义序列,因此根据文档,以下内容确实有效:
select U&"first\000asecond" from Two;
如果只是两个单词之间的换行符
创建表时使用:
CREATE TABLE One("first\nsecond" text);
由于反斜杠字符在这里没有特殊含义,因此该列不包含任何换行符。它包含 first
,然后是 \
,然后是 n
,然后是 second
。所以:
SELECT "first\nsecond" from One;
之所以有效,是因为它与 CREATE TABLE
鉴于
SELECT "first
second" from One;
失败是因为在该 SELECT 中有一个换行符,其中表中的实际列名有一个反斜杠后跟一个 n
。
这是“一”的反义词。
CREATE TABLE Two("first
second" text);
换行符是逐字记录的,是列的一部分。所以
SELECT "first
second" from Two;
之所以有效,是因为换行符与 CREATE TABLE 中的完全一样,带有嵌入式换行符,而
SELECT "first\nsecond" from Two;
失败,因为如前所述,此上下文中的 \n
并不意味着换行符。
如评论和您的编辑中所述,这可能是回车符和换行符,在这种情况下应该执行以下操作:
select U&"first\000d\000asecond" from Two;
尽管在我的测试中,在 Unix 和 Windows 上使用 psql
的列中间按 Enter 具有相同的效果:列名称中的单个换行符。
要检查列名中的确切字符,我们可以检查它们的十六进制。
当应用于创建表示例时,从 Unix 下的 psql 内部:
CREATE TABLE Two("first
second" text);
select convert_to(column_name::text,'UTF-8')
from information_schema.columns
where table_schema='public'
and table_name='two';
结果是:
convert_to
----------------------------
\x66697273740a7365636f6e64
对于更复杂的情况(例如,UTF-8 中具有多个字节的非 ascii 字符),更高级的查询可能会有所帮助,以获得易于阅读的代码点:
select c,lpad(to_hex(ascii(c)),4,'0') from (
select regexp_split_to_table(column_name::text,'') as c
from information_schema.columns
where table_schema='public'
and table_name='two'
) as g;
c | lpad
---+------
f | 0066
i | 0069
r | 0072
s | 0073
t | 0074
+| 000a
|
s | 0073
e | 0065
c | 0063
o | 006f
n | 006e
d | 0064
关于postgresql - 带换行符的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34894628/
这个问题已经有答案了: When to use single quotes, double quotes, and backticks in MySQL (13 个答案) 已关闭 3 年前。 我正在尝
我需要一个返回某些列值的选择查询。我想要的列以“U_S”开头。 Select * from em 我需要转换上面的查询。 '*' 必须是以下结果(但带有逗号): select COLUMN_NAME
在JPA中设置一对多关系时如何设置外键的列名? 我想将“items_id”的名称更改为“item_id” @OneToMany private List items; 我尝试了以下注释但没有成功: @
我有一个jqGrid列定义如下 name : 'idmycolumn', index : 'idmycolumn', width : 80,
我是否可以编写一个带参数的存储过程,即 mysql 查询,存储过程返回查询的列名? 例如我调用程序: 调用选择器('select * from users') 过程返回列名。使用 informatio
嗨,我刚刚开始学习 sql,我希望使用 concat 将列合并为一个列,但没能做到。我可以在没有 concat 的情况下运行代码,但是当我使用 concat 时,它会给我一个错误代码。谁能告诉我我做错
我们正在使用 java jdk 1.7.0_45,postgresql jdbc 连接器 postgresql-9.3-1100.jdbc41.jar。 这是我们问题的概要,下面粘贴了尽可能多的代码。
import pandas as pd import numpy as np rng = pd.date_range('1/1/2011', periods=6, freq='H') df = pd.
借助 PHP 的 mysqli 扩展,我可以使用 fetch_field() 方法通过 orgname 和 获取列和表的原始(无别名)名称结果中的 orgtable。 PDO 提供了方法getColu
我在 php 中使用 PDO,因此无法使用准备好的语句转义表名或列名。以下是我自己实现它的万无一失的方法吗: $tn = str_replace('`', '', $_REQUEST['tn']);
我想使用 apply 来跨越矩阵的行,并且我想在我的函数中使用当前行的行名。好像不能用rownames , colnames , dimnames或 names直接在函数内部。我知道我可以根据 thi
在编写管理数据的应用程序时,允许最终用户创建或删除最好表示为列的数据类别通常很有用。例如,我正在开发字典构建应用程序;用户可能会决定他们想要向数据添加“备用拼写”字段或其他内容,这可以很容易地表示为另
在我的数据框中,许多列名称以“.y”结尾,如示例所示: dat <- data.frame(x1=sample(c(0:1)), id=sample(10), av1.y = sample(10) ,
在 SQL Server 中,我希望看到 Table_Name 以及数据库中与该 Table_Name 关联的所有列。所以输出应该是这样的: TABLE_NAME COLUMN_N
在我的数据框中,许多列名称以“.y”结尾,如示例所示: dat <- data.frame(x1=sample(c(0:1)), id=sample(10), av1.y = sample(10) ,
在一种情况下,我们动态创建 sql 到 create动态临时表。 table_name 没有问题,因为它是由我们决定的,但是列名是由我们无法控制的来源提供的。 通常我们会使用以下查询检查列名: sel
我有一个数据框,我们可以通过代理 df = pd.DataFrame({'a':[1,0,0], 'b':[0,1,0], 'c':[1,0,0], 'd':[2,3,4]}) 还有一个类别系列 ca
我需要编写一个用户定义的函数,当应用于数据框时,它将返回列位置、列名称、模式和每个变量的类。我能够创建一个返回模式和类的,但是当我包含位置/名称时,我总是收到错误。我一直在这样做, myFunctio
我刚开始使用 QueryDSL 并遇到了问题。是否可以使用列名进行 orderBy?我为 orderBy 动态路径生成找到了这个: Generic querydsl orderBy dynamic p
操作 DataGridView 单元格时,您通常会执行以下操作: MyGrid.CurrentRow.Cells["EmployeeFirstName"].Value = "John"; 这一切都很好
我是一名优秀的程序员,十分优秀!