【发布时间】:2014-11-10 19:22:38
【问题描述】:
我有以下查询,我需要帮助将其转换为 MS SQL 2005 可以理解的语法,因为旧版本不支持其中的 FORMAT 等内容。
"SELECT " & _
"TMP.*," & _
"COUNT(*) OVER () AS rCount " & _
"FROM (" & _
"SELECT venueID, " & _
"venueName AS venueName, " & _
"venueAddress + ', ' + venueCity + ', ' + venueState + ' ' + venueZip AS venueAddress, " & _
"venueLatLong AS coordinates, " & _
"FORMAT(venueEventDate, 'MM/dd/yyyy', 'en-US') + ' @ ' + 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('" & center_lat & "')) " & _
"* cos(radians(SUBSTRING(venueLatLong, 1, CHARINDEX(',', venueLatLong)-1))) " & _
"* cos(radians(SUBSTRING(venueLatLong, CHARINDEX(',', venueLatLong) + 1, 1000)) " & _
"- radians('" & center_lng & "')) " & _
"+ sin(radians('" & center_lat & "')) " & _
"* sin(radians(SUBSTRING(venueLatLong, 1, CHARINDEX(',', venueLatLong)-1)))" & _
")" & _
", 1, 1)) AS distance " & _
"FROM meetUpMarkers) " & _
"TMP " & _
"WHERE distance < " & radius & " " & _
"ORDER BY venueName,distance DESC;"
我尝试将 FORMAT 替换为 CONVERT 但它似乎仍然不正确。
当我将 FORMAT 更改为 CONVERT 我得到错误:
类型venueEventDate 不是已定义的系统类型。
更新
Uggg...现在当我在本地运行它时,我得到了这个:
现在,即使我在本地运行它,我也会收到此错误???!??!及其 2012 年:
消息 8114,第 16 级,状态 5,第 2 行 将数据类型 varchar 转换为 float 时出错。
这是否意味着第 2 行第 5 字有错误?
不胜感激。
【问题讨论】:
-
尝试用
venueEventDate as dateAndTime替换整行。让查询正常工作后,请考虑如何格式化日期。 -
@GordonLinoff 这样做会给我错误将数据类型 varchar 转换为浮点数时出错。
-
@StealthRT,你试过 convert(varchar(40),venueEventdate, 101)
-
@StealthRT。 . .您的查询中没有任何内容会将该值转换为浮点数,因此我不理解错误消息。
-
我建议将整个事情转换为存储过程,而不是通过查询。这样你就可以从前端传递你的参数,让 sql 端处理剩下的部分。使调试更容易,更新超级轻松。考虑到计算的复杂性,这很可能会发生变化,并且使用 procs 还消除了重新部署前端代码来更改计算的需要。
标签: sql sql-server sql-server-2005 sql-server-2012