Синтаксис GDAL SQL для добавления полей и значений

9

Я пытаюсь создать новое поле в моей таблице атрибутов и ввести значения из другого поля после преобразования из символа в целое число, но не могу получить правильный синтаксис. Я запускаю это как shell-скрипт в MSYS.

cd D:/GIS_DataBase/CorineLC/shps_app_and_extr/
myfile=extr_and_app.shp

name=${myfile%.shp}

ogrinfo $myfile -sql "ALTER TABLE $name ADD COLUMN code_num int(3)"
ogrinfo $myfile -sql "UPDATE TABLE $name SET code_num = CONVERT(code_06 As int(3))"

Сообщение об ошибке (MSYS):

Kay@KAY-PC /c/users/kay/desktop/bash
$ sh calc_field_shp.sh
Warning 6: Unsupported column type 'int'. Defaulting to VARCHAR
INFO: Open of `extr_and_app.shp'
      using driver `ESRI Shapefile' successful.
ERROR 1: SQL Expression Parsing Error: syntax error
INFO: Open of `extr_and_app.shp'
      using driver `ESRI Shapefile' successful.

Редактировать - еще один переход с SQLite:

cd D:/GIS_DataBase/CorineLC/shps_app_and_extr/
myfile=extr_and_app.dbf

name=${myfile%.dbf}

ogrinfo $myfile -sql "ALTER TABLE $name DROP COLUMN code_num"

ogrinfo $myfile -sql "ALTER TABLE $name ADD COLUMN code_num integer(3)"
ogrinfo $myfile -dialect SQLite -sql "UPDATE $name SET code_num = CAST(code_06 As integer(3))"

Сообщение об ошибке:

Kay@KAY-PC /c/users/kay/desktop/bash
$ sh calc_field_shp.sh
INFO: Open of `extr_and_app.dbf'
      using driver `ESRI Shapefile' successful.
INFO: Open of `extr_and_app.dbf'
      using driver `ESRI Shapefile' successful.
ERROR 1: SQL Expression Parsing Error: syntax error
INFO: Open of `extr_and_app.dbf'
      using driver `ESRI Shapefile' successful.
Кей
источник
Какую ошибку вы получаете?
РК
@RK, я добавил сообщение об ошибке в op.
Кей
Вы пробовали CAST вместо CONVERT?
DMC
Я сделал без успеха ..
Кей

Ответы:

13

Поскольку UPDATE не поддерживается в OGR SQL , как вы указали в комментарии, вы должны обновить таблицу, используя диалект SQLite SQL, доступный в GDAL> = 1.10, с поддержкой SQLite и SpatiaLite :

ogrinfo $myfile -sql "ALTER TABLE $name ADD COLUMN code_num integer(3)"
ogrinfo $myfile -dialect SQLite -sql "UPDATE $name SET code_num = CAST(code_06 AS integer(3))"
Антонио Фальчано
источник
3

Вы можете попробовать использовать оператор CAST, поскольку dmci уже упоминал

ogrinfo $myfile -sql "UPDATE TABLE $name SET code_num = CAST(code_06 as int(3))"

Диалект SQL, поддерживаемый OGR, не имеет CONVERT, если он вызывается правильно. Вы можете проверить документы для получения дополнительной информации. Удачи!

RK
источник
1
По-видимому UPDATE, не поддерживается, см. Здесь: osgeo-org.1560.x6.nabble.com/… Однако, это должно быть на диалекте SQLite, но мне тоже не повезло с этим ..
Кей
Какую версию GDAL вы используете?
РК
Я использую GDAL-17
Кей
1
Диалект SQLite нуждается в GDAL / OGR 1.10 .
scruss