QGIS: formatage de chaîne lors de la création d'un champ virtuel
Je voudrais joindre les estimations démographiques du recensement américain aux limites des comtés .
La couche d'estimations de la population ( co-est2019-alldata
) contient STATE
et COUNTY
champs avec état et de comté FIPS codes, comme ceci:
ETAT | COMTÉ |
---|---|
36 | 51 |
1 | 15 |
La cb_2018_us_county_5m
couche de contour de comté ( ) contient les mêmes valeurs mais avec une mise en forme légèrement différente et en plus un GEOID
champ de chaîne qui combine les deux:
STATEFP | COUNTYFP | GEOID |
---|---|---|
36 | 051 | 36051 |
01 | 015 | 01015 |
QGIS ne prend pas en charge la jonction sur plusieurs champs , mais une solution de contournement courante consiste à créer un nouveau champ virtuel qui combine les attributs cibles. Je souhaite créer un champ virtuel dans la couche de population qui correspond au GEOID
champ de la couche de limite de comté.
Ce serait simple s'il y avait une fonction équivalente à sprintf
, car alors je pourrais simplement écrire:
sprintf('%02s%03s', "STATE", "COUNTY")
... mais pour autant que je sache, une telle fonction n'existe pas. Quelle est la meilleure façon de gérer cela?
Réponses
Essaye celui-là :
lpad(to_string("STATE"), 2, '0') || lpad(to_string("COUNTY"), 3, '0')
Retour
si "STATE"
= 1
et "COUNTY"
= 15
: 01015
si "STATE"
= 22
et "COUNTY"
= 5
:22005
De la documentation:
lpad (
string
,width
,fill
) ( doc ):Renvoie une chaîne complétée à gauche à la largeur spécifiée, en utilisant un caractère de remplissage. Si la largeur cible est inférieure à la longueur de la chaîne, la chaîne est tronquée.
to_string (
number
) ( doc ): (car je n'étais pas sûr que vos champs étaient des caractères)Convertit un nombre en chaîne.
|| : concaténer deux chaînes