SQL выдает ошибку - PullRequest
       4

SQL выдает ошибку

1 голос
/ 21 февраля 2012

Я использую следующий синтаксис SQL на классической странице ASP.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;

Я получаю следующую ошибку:

Сообщение 8114, уровень 16, состояние 5, строка1
Ошибка преобразования типа данных nvarchar в числовой.

Если я закомментирую следующее, запрос будет выполнен:

AND CONVERT(decimal, HostLatitude) > 51
AND CONVERT(decimal, HostLatitude) < 53

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

Это происходит потому, что HostLatitude содержит строковое значение, которое не может быть преобразовано в десятичное число. Например:

  • 'а'
  • ''
  • 123,45
1 голос
/ 21 февраля 2012

Это означает, что где-то вдоль строки HostLatitude заполняется нечисловыми символами. Вы можете использовать предложение CASE, чтобы проверить ISNUMERIC () и вернуть null или другое значение по умолчанию, если оно не является числом

AND case when isnumeric(HostLatitude) = 1 
           then convert(decimal, HostLatitude)
           else null 
    end) > 51
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...