SQL查询在2012年起作用,2005年不起作用

SQL查询在2012年起作用,2005年不起作用,sql,sql-server,sql-server-2005,sql-server-2012,Sql,Sql Server,Sql Server 2005,Sql Server 2012,我有以下查询,我需要帮助将其转换为MS SQL 2005可以理解的语法,因为格式以及其中的其他内容不受旧版本的支持 "SELECT " & _ "TMP.*," & _ "COUNT(*) OVER () AS rCount " & _ "FROM (" & _ "SELECT venueID, " & _ "venueName AS venueName, " & _ "venueA

我有以下查询,我需要帮助将其转换为MS SQL 2005可以理解的语法,因为格式以及其中的其他内容不受旧版本的支持

"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;"
“选择”和_
“TMP.*”&_
“计数(*)超过()作为rCount”&_
从(&)_
“选择venueID,&”_
“venueName作为venueName,”&_
“venueAddress+”、“+venueCity+”、“+venueState+”、“+venueZip作为venueAddress,”&_
“venueLatLong作为坐标,&”_
“格式(venueEventDate,'MM/dd/yyyy,'en-US')+'@'+转换(VARCHAR,venueTime)为日期和时间,”_
“子串(venueLatLong,1,CHARINDEX(',',venueLatLong)-1)作为Lat,”_
“子串(venueLatLong,CHARINDEX(',',venueLatLong)+11000)作为液化天然气,”_
“(圆形(&)_
“3959*acos”和_
"(" & _
"cos(弧度)("""和"中心"")"和_
*cos(弧度(子串(venueLatLong,1,CHARINDEX(',',venueLatLong)-1))_
*cos(弧度(子串(维努拉特朗,查林德克斯(',',,维努拉特朗)+11000))_
“-弧度('”¢er_lng&“)”&_
“+sin(弧度(”¢er_lat&“)”&_
“*sin(弧度(子串(venueLatLong,1,CHARINDEX(',',venueLatLong)-1))”&_
")" & _
“,1,1))作为距离”_
“来自meetUpMarkers”和_
"TMP"及_
“其中距离<”&半径&”_
“按VenuName排序,距离描述;”
我试图用CONVERT替换格式,但似乎仍然不正确

当我将格式更改为CONVERT时,会出现以下错误:

类型venueEventDate不是定义的系统类型

更新

Uggg。。。现在,当我在本地运行它时,我得到以下信息:

现在,即使我在本地运行它,我也会得到这个错误???!??!其2012年:

Msg 8114,第16级,第5状态,第2行 将数据类型varchar转换为float时出错

这是否意味着第2行,单词5有错误?

非常感谢您的帮助。

和的参数顺序不同。错误消息指示您将字段名放入数据类型参数位置。它是:

FORMAT ( value, format [, culture ] )
vs

尝试将
格式(venueEventDate,'MM/dd/yyyy,'en US')
替换为以下格式:

CONVERT(VARCHAR, venueEventDate, 101)`

尝试将整行替换为仅
venueEventDate作为dateAndTime
。查询运行后,请担心如何格式化日期。@GordonLinoff这样做会导致将数据类型varchar转换为float时出错。@StealthRT,是否尝试转换(varchar(40),venueEventdate,101)@StealthRT。您的查询中没有任何内容会将该值转换为浮点值,因此我不理解错误消息。我建议将整个内容转换为存储过程,而不是传递查询。这样,您可以从前端传递参数,并让sql端处理其余部分。使调试更容易,更新也超级轻松。考虑到计算的复杂性,这很可能会发生更改,使用procs也无需重新部署前端代码来更改计算。请不要指定没有声明长度的字符串类型,因为有时默认值为1
VARCHAR(30)
很好。@srutzky我从未经历过。这就是说,
VARCHAR(10)
是所有必要的,因为样式101总是正好有10个字符长。可能是在列和/或局部变量中使用时。有两个默认值:一个是30,另一个是1,这取决于它的使用位置。但是,10是可以的。谢谢@BaconBits为我所需要的工作。
CONVERT(VARCHAR, venueEventDate, 101)`