9

मैं इस कोड के साथ अजीब समस्या है: अगर मैं इसे चलाने से पता चला की तरह नीचे मैं त्रुटि मिलती है:एक अमान्य फ़्लोटिंग पॉइंट ऑपरेशन हुआ। एसक्यूएल सर्वर 2008

An invalid floating point operation occurred.

लेकिन अगर मैं -९८.५०८७३० पैरामीटर @Longitude बदल (नोटिस केवल पिछले अंक बदल) कोड ठीक काम करता है।

कोड कुछ LatLng बिंदु के आसपास @MilesRadius में गुणों को सूचीबद्ध करने के लिए माना जाता है।
@ अक्षांश और @ लांगिट्यू पैरामीटर टेबल एड्रेस में रेखांश और अक्षांश फ़ील्ड के समान प्रकार के होते हैं।

मैं यहां क्या कर सकता हूं? धन्यवाद।

DECLARE @Latitude decimal (10,6); 
DECLARE @Longitude decimal (10,6); 
DECLARE @MilesRadius int; 
SET @Latitude = 29.607654 
SET @Longitude = -98.508731 
SET @MilesRadius = 5 

SELECT  ADR.LineOne as address, 
      ADR.City as city,   
      ADR.Latitude as latitude, 
      ADR.Longitude as longitude, 
      ((3959 * acos(cos(radians(@Latitude)) * cos(radians(ADR.Latitude)) * cos(radians(ADR.Longitude) - radians(@Longitude)) + sin(radians(@Latitude)) * sin(radians(ADR.Latitude))))) as distance 
FROM  Shared.Address ADR 
WHERE  ADR.Latitude IS NOT NULL AND 
      ADR.Longitude IS NOT NULL AND 
      (3959 * acos(cos(radians(@Latitude)) * cos(radians(ADR.Latitude)) * cos(radians(ADR.Longitude) - radians(@Longitude)) + sin(radians(@Latitude)) * sin(radians(ADR.Latitude)))) < @MilesRadius      
ORDER BY distance 
+2

आप अपनी क्वेरी का हिस्सा है जहां आप चर घोषित याद कर रहे हैं, आपके सवाल – Lamak

+0

मैंने किया है कि जोड़ें। क्षमा करें कि भूल गया। पैरामीटर अक्षांश और देशांतर पता तालिका में अक्षांश और देशांतर फ़ील्ड के समान प्रकार के होते हैं। दशमलव (10,6) – bobetko

उत्तर

10

केवल समारोह है कि आप उपयोग कर रहे रिटर्न एक डोमेन त्रुटि ACOS है और वह तब होता है जब इनपुट रेंज -1 to +1 ताकि आप केवल इस मामले बेला कर सकते हैं में नहीं है (मैं यह सोचते हैं रहा हूँ मध्यवर्ती अभिव्यक्ति की तरह कुछ है 1.000000000001 गोलाई त्रुटियों के कारण)

SELECT  ADR.LineOne as address, 
      ADR.City as city,   
      ADR.Latitude as latitude, 
      ADR.Longitude as longitude, 
      distance 
FROM  Shared.Address ADR 
CROSS APPLY (SELECT cos(radians(@Latitude)) * cos(radians(ADR.Latitude)) * cos(radians(ADR.Longitude) - radians(@Longitude)) + sin(radians(@Latitude)) * sin(radians(ADR.Latitude))) T(ACosInput) 
CROSS APPLY (SELECT ((3959 * acos(CASE WHEN ABS(ACosInput) > 1 THEN SIGN(ACosInput)*1 ELSE ACosInput END)))) T2(distance) 
WHERE  ADR.Latitude IS NOT NULL AND 
      ADR.Longitude IS NOT NULL AND 
      distance < @MilesRadius      
ORDER BY distance 
+1

धन्यवाद। अच्छा काम करता है। :-) – bobetko

संबंधित मुद्दे