QGIS: Formatowanie ciągów znaków podczas tworzenia pola wirtualnego
Chciałbym połączyć szacunki populacji spisu ludności w USA z granicami hrabstw .
Warstwa szacunki populacji ( co-est2019-alldata
) zawiera STATE
i COUNTY
Pola stanu i powiatu FIPS kodów, jak to:
STAN | HRABSTWO |
---|---|
36 | 51 |
1 | 15 |
Warstwa granica hrabstwa ( cb_2018_us_county_5m
) zawiera te same wartości, ale z nieco innym formatowaniem i dodatkowo GEOID
pole tekstowe, które łączy te dwa elementy:
STATEFP | COUNTYFP | GEOID |
---|---|---|
36 | 051 | 36051 |
01 | 015 | 01015 |
QGIS nie obsługuje łączenia na wielu polach , ale powszechnym obejściem jest utworzenie nowego pola wirtualnego, które łączy atrybuty docelowe. Chcę utworzyć wirtualne pole w warstwie populacji, które będzie pasować do GEOID
pola w warstwie granicy hrabstwa.
Byłoby to proste, gdyby istniała funkcja równoważna sprintf
, ponieważ wtedy mógłbym po prostu napisać:
sprintf('%02s%03s', "STATE", "COUNTY")
... ale o ile wiem, taka funkcja nie istnieje. Jak najlepiej sobie z tym poradzić?
Odpowiedzi
Spróbuj tego :
lpad(to_string("STATE"), 2, '0') || lpad(to_string("COUNTY"), 3, '0')
zwroty
if "STATE"
= 1
and "COUNTY"
= 15
: 01015
if "STATE"
= 22
and "COUNTY"
= 5
:22005
Z dokumentacji:
LpAd (
string
,width
,fill
) ( doc )Zwraca ciąg dopełniony po lewej stronie do określonej szerokości przy użyciu znaku wypełnienia. Jeśli szerokość docelowa jest mniejsza niż długość łańcucha, ciąg jest obcinany.
to_string (
number
) ( doc ): (ponieważ nie byłem pewien, czy twoje pola są znakami)Konwertuje liczbę na ciąg.
|| : łączy dwa ciągi