QGIS: formatage de chaîne lors de la création d'un champ virtuel

Dec 10 2020

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 STATEet COUNTYchamps avec état et de comté FIPS codes, comme ceci:

ETAT COMTÉ
36 51
1 15

La cb_2018_us_county_5mcouche de contour de comté ( ) contient les mêmes valeurs mais avec une mise en forme légèrement différente et en plus un GEOIDchamp 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 GEOIDchamp 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

3 J.Monticolo Dec 10 2020 at 05:27

Essaye celui-là :

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

Retour

si "STATE"= 1et "COUNTY"= 15: 01015
si "STATE"= 22et "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