QGIS: форматирование строки при создании виртуального поля

Dec 10 2020

Я хотел бы присоединить оценки населения переписи США с границами округов .

Оценки численности населения слой ( co-est2019-alldata) содержит STATEи COUNTYполе с состоянием и округом FIPS коды, как это:

ШТАТ ОКРУГ
36 51
1 15

cb_2018_us_county_5mСлой county boundary ( ) содержит те же значения, но с немного другим форматированием, а также GEOIDстроковое поле, которое объединяет два:

СТАТЕФП COUNTYFP ГЕОИД
36 051 36051
01 015 01015

QGIS не поддерживает объединение нескольких полей , но обычно обходным путем является создание нового виртуального поля, которое объединяет целевые атрибуты. Я хочу создать виртуальное поле в слое населения, которое соответствует GEOIDполю в пограничном слое округа.

Это было бы просто, если бы существовала функция, эквивалентная sprintf, потому что тогда я мог бы просто написать:

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

... но, насколько я могу судить, такой функции не существует. Как лучше всего с этим справиться?

Ответы

3 J.Monticolo Dec 10 2020 at 05:27

Попробуй это :

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

возвращается

если "STATE"= 1и "COUNTY"= 15: 01015
если "STATE"= 22и "COUNTY"= 5:22005

Из документации:

  • LPAD ( string, width, fill) ( документ ):

    Возвращает строку, дополненную слева до указанной ширины, используя символ заполнения. Если целевая ширина меньше длины строки, строка усекается.

  • to_string ( number) ( doc ): (потому что я не был уверен, что ваши поля были символами)

    Преобразует число в строку.

  • || : объединить две строки