我在经典ASP页面上使用以下SQL语法。遗憾的是HostLatitude
是nvarchar(20)
,因此是十进制转换。
SELECT
HostID, HostLatitude, HostLongitude, HostNames, HostPropertyName,
HostStreet, HostSuburb, HostCity, HostPhone, HostMobile,
HostLastUpdated, HostJoinDate, HostPostCode, hgbCounter, HostStateID
FROM
Hosts
WHERE
HostLatitude IS NOT NULL
AND Datalength(HostLatitude) > 5
AND CONVERT(decimal, HostLatitude) > 51
AND CONVERT(decimal, HostLatitude) < 53
AND HostRegionID = 303
AND HostLastUpdated >CONVERT(DATETIME, '2012-02-21 00:00:00', 102) - 730
AND Datalength(HostLatitude) > 2
AND Datalength(HostLongitude) > 1
AND HostApproved = 1
AND HostDisabled = 0
AND AdminDisabled = 0
ORDER BY
HostID DESC;
我收到以下错误:
Msg 8114,Level 16,State 5,Line 1
将数据类型nvarchar转换为数字时出错。
如果我注释掉以下内容,则运行查询:
AND CONVERT(decimal, HostLatitude) > 51
AND CONVERT(decimal, HostLatitude) < 53
答案 0 :(得分:1)
这意味着HostLatitude沿线的某处填充了一些非数字字符。您可以使用CASE子句来检查ISNUMERIC()并在它不是数字时返回null或其他一些默认值
AND case when isnumeric(HostLatitude) = 1
then convert(decimal, HostLatitude)
else null
end) > 51
答案 1 :(得分:1)
这是因为HostLatitude
包含无法转换为十进制的字符串值。
例如: