QGIS: formato de cadena al crear un campo virtual

Dec 10 2020

Me gustaría unirme censo de Estados Unidos las estimaciones de población con los límites del condado .

La capa estimaciones de la población ( co-est2019-alldata) contiene STATEy COUNTYcampos con la norma FIPS estado y del condado códigos, así:

ESTADO CONDADO
36 51
1 15

La cb_2018_us_county_5mcapa del límite del condado ( ) contiene los mismos valores pero con un formato ligeramente diferente y, además, un GEOIDcampo de cadena que combina los dos:

STATEFP CONDADOFP GEOID
36 051 36051
01 015 01015

QGIS no admite unirse en varios campos , pero una solución común es crear un nuevo campo virtual que combine los atributos de destino. Quiero crear un campo virtual en la capa de población que coincida con el GEOIDcampo en la capa de límite del condado.

Esto sería simple si hubiera una función equivalente a sprintf, porque entonces podría simplemente escribir:

sprintf('%02s%03s', "STATE", "COUNTY")

... pero por lo que puedo decir, no existe tal función. ¿Cuál es la mejor manera de manejar esto?

Respuestas

3 J.Monticolo Dec 10 2020 at 05:27

Prueba este:

lpad(to_string("STATE"), 2, '0') || lpad(to_string("COUNTY"), 3, '0')

devoluciones

si "STATE"= 1y "COUNTY"= 15: 01015
si "STATE"= 22y "COUNTY"= 5:22005

De la documentación:

  • lpad ( string, width, fill) ( doc ):

    Devuelve una cadena rellenada a la izquierda hasta el ancho especificado, utilizando un carácter de relleno. Si el ancho objetivo es menor que la longitud de la cadena, la cadena se trunca.

  • to_string ( number) ( doc ): (porque no estaba seguro de que sus campos fueran caracteres)

    Convierte un número en una cadena.

  • || : concatenar dos cadenas