¿Cómo concatenar etiquetas en QGIS?


14

Estoy usando QGIS 1.8 en una máquina con Windows XP e intento hacer una concatenación de varios campos para etiquetar los nombres de mis carreteras locales en la tabla de atributos, pero no puedo encontrar la sintaxis correcta. El primer campo consiste en om la calle, el segundo tipo de enlace, por ejemplo: Avenue y la tercera orientación, por ejemplo, East u West. ¿Podría decirme cómo escribir la sintaxis correcta usando el cuadro de diálogo de etiquetas basado en una fórmula? Adjunto una captura de pantalla que muestra la tabla de atributos.

ingrese la descripción de la imagen aquí

Respuestas:


19

El operador de concatenación es ||(¿extraño eh?), Por lo que usaría algo como:

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

Intersperse con los separadores y las cadenas estáticas que desee.

Como señaló @NathanW, esto fallará si alguno de los campos es NULL, pero puede usar un valor de reserva en ese caso:

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

QGIS admite una función auxiliar coalescedesde la versión 2.0. Está ahí para evitar los problemas de NULL y el ejemplo se vería así:

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

2
También existe la concatfunción en las versiones de desarrollo. Usando || no maneja NULL, si linkes NULL, toda la etiqueta es nula concatno tiene este problema. || está tomado de Postgres postgresql.org/docs/9.1/static/functions-string.html
Nathan W

Parece que no admite declaraciones de casos directamente. ¿Es la única opción sin usar SQL directamente para crear una copia no NULL de la columna de enlace?
lynxlynxlynx

¿Qué quiere decir que no admite declaraciones de casos?
Nathan W

3
Te falta END. La cadena correcta esCASE WHEN ("link" IS NULL) THEN '(nodata)' ELSE "link" END
Nathan W

1
ahh coalescees el que quise decir.
Nathan W

2

En QGIS veriosn 2.0.1, la expresión simple funcionaba así:

"campo1" || '(' || "field2" || ')'

salida deseada: campo1 (campo2)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.