Cú pháp GDAL SQL để thêm trường một giá trị đặt


9

Tôi cố gắng tạo một trường mới trong bảng thuộc tính của mình và đặt các giá trị từ một trường khác sau khi chuyển đổi từ ký tự sang số nguyên nhưng không thể có được cú pháp đúng. Tôi chạy nó dưới dạng shell-script trong 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))"

Thông báo lỗi (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.

Chỉnh sửa - Một cách khác với 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))"

Thông báo lỗi:

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.

lỗi gì bạn nhận được?
RK

@RK, tôi đã thêm thông báo lỗi vào op.
Kay

Bạn đã thử CAST thay vì CHUYỂN ĐỔI chưa?
dmci

Tôi đã làm mà không thành công ..
Kay

Câu trả lời:


13

Vì UPDATE không được hỗ trợ trong OGR SQL , như bạn đã nêu trong một nhận xét, bạn nên cập nhật bảng bằng phương ngữ SQLite SQL có sẵn trong GDAL> = 1.10 với hỗ trợ SQLite và 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

Bạn có thể thử sử dụng toán tử CAST vì dmci đã đề cập như vậy

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

Phương ngữ SQL được OGR hỗ trợ không có CHUYỂN ĐỔI nếu gọi lại chính xác. Bạn có thể kiểm tra các tài liệu để biết thêm. Chúc may mắn!


1
Dường như UPDATEkhông được hỗ trợ, xem tại đây: osgeo-org.1560.x6.nabble.com/ , Tuy nhiên, nó phải theo phương ngữ SQLite nhưng tôi cũng không gặp may mắn với điều đó, ..
Kay

Phiên bản GDAL nào bạn đang sử dụng?
RK

Tôi đang sử dụng gdal-17
Kay

1
Phương ngữ SQLite cần GDAL / OGR 1.10 .
xem xét
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.