2

mysql には、Google マップによって提供される緯度と経度を含む varchar があります。境界ボックスの値に基づいてクエリを実行できるようにする必要がありますが、現在利用可能な地理機能は必要ありません。varchar で見つかった Decimal 値を 2 つの新しい Decimal フィールドに入力しようとしています。これが私が使用しようとしているクエリですが、結果はすべて新しいフィールドの丸められた値です。

サンプルデータ:

'45.390746926938185, -122.75535710155964',
'45.416444621636415, -122.63058006763458'

テーブルの作成:

CREATE TABLE IF NOT EXISTS `cameras` (
  `id` int(11) NOT NULL auto_increment,
  `user_id` int(75) NOT NULL,
  `position` varchar(75) NOT NULL,
  `latitude` decimal(17,15) default NULL,
  `longitude` decimal(18,15) default NULL,
  `address` varchar(75) NOT NULL,<br />
  `date` varchar(11) NOT NULL,<br />
  `status` int(1) NOT NULL default '1',
  `duplicate_report` int(11) NOT NULL default '0',
  `missing_report` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `user_id` (`user_id`),
  KEY `status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1050 ;

SQL:

UPDATE cameras
SET latitude = CAST( (substring(position,1,locate(',',position))) AS DECIMAL(17,15) ),
    longitude = CAST( (substring(position,locate(',',position)+1)) AS DECIMAL(18,15) )

SQL 代替試行:

UPDATE cameras
SET latitude = CONVERT( (substring(position,1,locate(',',position))), DECIMAL(17,15) ),
    longitude = CONVERT( (substring(position,locate(', ',position)+1)), DECIMAL(18,15) )

結果のフィールド値は、両方のシナリオに対応しています。

45.000000000000000 and -122.000000000000000
AND
45.000000000000000 and -122.000000000000000

誰かが私が間違っていることを見ることができますか? ありがとう。

4

1 に答える 1