SQL 2012 LEFT 或 SUBSTRING 函数出错

SQL 2012 Error in LEFT or SUBSTRING function

我正在尝试执行以下 SQL 查询:

SELECT TMP.*,COUNT(*) OVER () AS rCount 
FROM (
    SELECT venueID, 
           venueName AS venueName, 
           venueSpanish AS spanish, 
           venueAddress + ', ' + venueCity + ', ' + venueState + ' ' + venueZip AS venueAddress, 
           venueLatLong AS coordinates, 
           CONVERT(VARCHAR, venueEventDate, 101) + ' @ ' + CONVERT(VARCHAR,venueTime) AS dateAndTime, 
           SUBSTRING(venueLatLong, 1, CHARINDEX(',', venueLatLong)-1) AS Lat, 
           SUBSTRING(venueLatLong, CHARINDEX(',', venueLatLong) + 1, 1000) AS Lng, 
           (round(3959 * acos (cos(radians('35.0935409')) * 
                cos(radians(SUBSTRING(venueLatLong, 1, CHARINDEX(',', venueLatLong)-1))) * 
                cos(radians(SUBSTRING(venueLatLong, CHARINDEX(',', venueLatLong) + 1, 1000)) - 
                radians('-85.0856761')) + 
                sin(radians('35.0935409')) * 
                sin(radians(SUBSTRING(venueLatLong, 1, CHARINDEX(',', venueLatLong)-1)))), 1, 1)) AS distance 
    FROM meetUpMarkers) TMP 
WHERE distance < 30 

但是,我在这样做时发现这是一个错误:

Msg 537, Level 16, State 2, Line 1

Invalid length parameter passed to the LEFT or SUBSTRING function.

任何帮助都可以很好地解决这个问题!

大概是这一行:

SUBSTRING(venueLatLong, 1, CHARINDEX(',', venueLatLong)-1) AS Lat

venueLatLong 中没有逗号,这导致 -1 的长度

为什么不将纬度和经度存储在两个数字列中而不是 VarChar 中?

问题可能出在传递给 substring 函数的参数上。此条件在查询中重复出现。

CHARINDEX(',', venueLatLong)

如果 venueLatLong 不包含 ,substring 的这个参数无效。

这可以通过包含 where 子句来避免。

WHERE CHARINDEX(',', venueLatLong) > 0