QGIS: formato de cadena al crear un campo virtual
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 STATE
y COUNTY
campos con la norma FIPS estado y del condado códigos, así:
ESTADO | CONDADO |
---|---|
36 | 51 |
1 | 15 |
La cb_2018_us_county_5m
capa del límite del condado ( ) contiene los mismos valores pero con un formato ligeramente diferente y, además, un GEOID
campo 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 GEOID
campo 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
Prueba este:
lpad(to_string("STATE"), 2, '0') || lpad(to_string("COUNTY"), 3, '0')
devoluciones
si "STATE"
= 1
y "COUNTY"
= 15
: 01015
si "STATE"
= 22
y "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