Как я могу запросить "между" числовыми данными в нечисловом поле?

У меня есть запрос, который я только что нашел в базе данных, который не работает, вызывая падение отчета. Основная суть запроса:

Select *
From table
Where IsNull(myField, '') <> ''
And IsNumeric(myField) = 1
And Convert(int, myField) Between @StartRange And @EndRange

Теперь myField не содержит числовых данных во всех строках [он имеет тип nvarchar] ... но этот запрос, очевидно, был разработан таким образом, что он заботится только о тех строках, где данные в это числовое поле.

Проблема заключается в том, что T-SQL (почти, насколько я понимаю) не замыкает предложение Where, что заставляет его отказаться от записей, где данные не являются числовыми, за исключением:

Сообщение 245, уровень 16, состояние 1, строка 1 Ошибка преобразования при преобразовании значения nvarchar '/ A' в тип данных int.

Если не считать сброса всех строк, где myField является числовым, во временную таблицу, а затем запроса этого для строк, где поле находится в указанном диапазоне, что может Я делаю это оптимально?

Мой первый синтаксический анализ с целью проанализировать возвращенные данные и посмотреть, что происходит, был:

Select *
From (
   Select *
   From table
   Where IsNull(myField, '') <> ''
   And IsNumeric(myField) = 1
) t0
Where Convert(int, myField) Between @StartRange And @EndRange

Но я получаю ту же ошибку, что и для первого запроса, но я не уверен, что я поймите, я не конвертирую данные, которые не должны быть числовыми. Подзапрос должен возвращать только строки, в которых myField содержит числовые данные.

Может, мне нужен утренний чай, но имеет ли это смысл для кого-то? Другая пара глаз могла бы помочь.

Заранее спасибо

7
задан BenAlabaster 21 September 2010 в 12:50
поделиться