Sintaks GDAL SQL untuk menambahkan bidang nilai put


9

Saya mencoba membuat bidang baru di tabel atribut saya dan memasukkan nilai dari bidang lain setelah mengkonversi dari karakter ke integer tetapi tidak bisa mendapatkan sintaks yang tepat. Saya menjalankan ini sebagai shell-script di 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))"

Pesan Kesalahan (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.

Sunting - Lain lagi dengan 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))"

Pesan eror:

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.

Kesalahan apa yang Anda dapatkan?
RK

@RK, saya menambahkan pesan kesalahan ke op.
Kay

Sudahkah Anda mencoba CAST dan bukannya CONVERT?
dmci

Saya berhasil tanpa hasil ..
Kay

Jawaban:


13

Karena UPDATE tidak didukung dalam OGR SQL , seperti yang Anda nyatakan dalam komentar, Anda harus memperbarui tabel menggunakan dialek SQLite SQL yang tersedia di GDAL> = 1.10 dengan dukungan SQLite dan 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

Anda dapat mencoba menggunakan operator CAST seperti yang disebutkan oleh dmci seperti itu

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

Dialek SQL yang didukung oleh OGR tidak memiliki CONVERT jika dipanggil dengan benar. Anda dapat memeriksa dokumen untuk info lebih lanjut. Semoga berhasil!


1
Tampaknya UPDATEtidak didukung, lihat di sini: osgeo-org.1560.x6.nabble.com/... Namun, itu harus dalam dialek SQLite tetapi saya tidak beruntung dengan itu, baik ..
Kay

GDAL versi apa yang Anda gunakan?
RK

Saya menggunakan gdal-17
Kay

1
Dialek SQLite membutuhkan GDAL / OGR 1.10 .
scruss
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.