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
我正在尝试执行以下 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