0

データベースで特定のクエリを実行しようとしていますが、次のエラーが発生します

テーブルSan_Filial

Filial_Id   Name    lat            lon
2           A       -19.926131     -43.924373
3           B       -19.952192     -43.938789
4           C       -19.939626     -43.924541
5           D       -19.95529      -43.92953
6           E       -19.9099       -43.93124
7           F       -19.926191     -43.946067
9           G       -19.97125      -43.96622
14          H       -19.89038      -43.921734
17          I       -19.88838      -43.93059
19          J       -19.94305      -43.94093

クエリ

SELECT *
FROM San_Filial 
WHERE San_Filial.Credenciada_Id IN (2,3,4,5,6,7,9,14,17)
AND ACOS(COS(RADIANS(ltrim(San_Filial.lat))) 
* COS(RADIANS(convert(float, -19.926131))) 
* COS(RADIANS(ltrim(San_Filial.lon)) 
- RADIANS(convert(float, -43.924373))) 
+ SIN(RADIANS(ltrim(San_Filial.lat))) 
* SIN(RADIANS(convert(float, -19.926131)))) * 6380 < 5.0 

エラー

Mesage 8114, Level 16, State 5, Line 1
Error converting data type varchar to float.

誰かが私を助けることができますか?

4

1 に答える 1

0

正しい形式ではないデータがあるかどうかを確認することから始めます。

select *
from san_filia1
wHERE San_Filial.Credenciada_Id IN (2,3,4,5,6,7,9,14,17) and
      (isnumeric(lat) = 0 or isnumeric(long) = 0)

これにより、問題の原因がわかり、修正できます。

正しい修正はおそらくこれらの線に沿っています:

select *
from (select sf.*,
             (case when isnumeric(lat) then cast(lat as float) end) as latf,
             (case when isnumeric(long) then cast(long as float) end) as longf
      from san_filial sf
     ) sf
where . . . -- use Latf and Longf instead of lat and long

caseステートメント内で変換を実行して、期待どおりに機能することを保証する必要があります。SQLはステートメントの順序を保証せず、計算にフィルターが適用される場合があります。

于 2013-02-27T16:25:21.843 に答える