如何串联QGIS中的标签?


14

我在Windows XP计算机上使用QGIS 1.8,并且尝试对多个字段进行串联以在属性表中标记本地道路的名称,但是找不到正确的语法。第一个字段包含街道,第二个链接类型,例如:大道和第三个方向,例如东或西。您能告诉我如何使用基于公式的标签对话框来编写正确的语法。附加了显示属性表的屏幕截图。

在此处输入图片说明

Answers:


19

串联运算符是||(奇数吗?),因此您将使用类似以下的内容:

street || ', ' || link || ', ' || orientation

将它们与所需的任何分隔符和静态字符串一起穿插。

如@NathanW所指出的,如果任何字段为NULL,这将失败,但是在这种情况下,您可以使用后备值:

street || ', ' || CASE WHEN ("link" IS NULL) THEN '(nodata)' ELSE "link" END || ', ' || orientation

coalesce从2.0版开始,QGIS支持辅助功能。它可以避免NULL问题,并且示例如下所示:

 street || ', ' || coalesce(link, '(nodata)') || ', ' || orientation

2
concat开发版本中也有此功能。使用|| 不处理NULL,如果link为NULL,则整个标签为NULL concat不会出现此问题。|| 取自Postgres postgresql.org/docs/9.1/static/functions-string.html
Nathan W

看起来它不直接支持case语句。是唯一不直接使用SQL来创建链接列的非NULL副本的唯一选择吗?
lynxlynxlynx 2012年

您是什么意思不支持案例陈述?
内森·W

3
您缺少END。正确的字符串是CASE WHEN ("link" IS NULL) THEN '(nodata)' ELSE "link" END
Nathan W

1
coalesce是我的意思。
内森·W

2

在QGIS veriosn 2.0.1上,简单的表达式如下所示:

“ field1” || '('||“ field2” ||')'

所需的输出:field1(field2)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.