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


9

Я намагаюся зробити нове поле в своїй таблиці атрибутів і ввести значення з іншого поля після перетворення з символу в ціле число, але не можу отримати правильний синтаксис. Я запускаю це як оболонку-скрипт у 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, я додав повідомлення про помилку до оп.
Кей

ви пробували CAST замість CONVERT?
dmci

Я пройшов без успіху ..
Кей

Відповіді:


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, якщо виклик правильно. Ви можете перевірити документи для отримання додаткової інформації. Удачі!


1
Здається, UPDATEце не підтримується, дивіться тут: osgeo-org.1560.x6.nabble.com/… Однак це повинно бути на діалекті SQLite, але мені теж не пощастило з цим ..
Кей

Яку версію GDAL ви використовуєте?
РК

Я використовую gdal-17
Kay

1
Діалект SQLite потребує GDAL / OGR 1.10 .
scruss
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.