2011-06-17 1 views
1

У меня есть поле в нашей базе данных SQL, обозначенное как результат-ответ. В этом поле представлены результаты и любые примечания к ним. Я нашел логику для извлечения чисел из поля, но я не могу преобразовать их в числовые. Мы используем Precision BI в качестве нашей промежуточной программы.Я не могу преобразовать числа, извлеченные из текстового поля, чтобы считаться числовыми в SQL

Я пытаюсь вытащить только те, у которых значение меньше 7. Я использую только цифры, используя строку, которая извлекает только цифры из полей.

Left(SubString([result].[resultanswer], PatIndex('%[0-9.-]%', [result]. 
[resultanswer]), 8000), PatIndex('%[^0-9.-]%', SubString([result].[resultanswer], 
PatIndex('%[0-9.-]%', [result].[resultanswer]), 8000) + 'X')-1) 

Однако, когда я добавить запрос отображает только те числа менее 7 я получаю ошибку преобразования, чаще всего по линии "не удалось преобразовать VARCHAR в числовой. Если я запустил поиск без запроса менее 7, он будет работать только отлично и отображать только цифры в этом поле. Если я добавлю поле для отображения, если это поле является числовым, оно отображает 1 или да для всех из них. Я могу принимать и преобразовывать значения в числовые с помощью функции преобразования или функции трансляции (добавляя преобразование или преобразование в начало указанной строки), но как только я добавляю менее 7 критериев, он говорит, что он не может преобразовать , несмотря на это, прежде чем добавлять критерии. Все это не имеет смысла.

Вот пример данных.

result-numericresult result-resultanswer result-numeric 
9.23     9.23     9.23 
.00      9.24     9.24 
.00      9.24 Result Repeated 9.24 
.00      9.25     9.25 
9.25     9.25     9.25 

Как вы можете видеть, у меня есть поле результата (так называемый numericresult), который имеет уже числовые, то проблема с ним в том, что программа поставляет данные в БД посылает нули вместо фактических значений. У меня также есть поле ответа результата (называемое resultanswer), которое дает мне числовые данные, но также имеет текст. Цель состояла в том, чтобы в основном заменить поле numericresult на реальное поле numericresult, которое не имеет нулей, когда это не должно. Таким образом, строка вытягивает числа из поля resultanswer. Последний столбец (называемый числовым) - это настраиваемое поле, которое вытягивает числа из поля resultanswer и является полем, которое я пытаюсь измерить. Таким образом, эти значения меньше 7.

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

+3

может быть, немой вопрос, но почему вы объединяете их в одном поле? Все будет намного легче для вас, если вы отделите значение от описания .... – jaltiere

+1

Можете ли вы показать свою структуру таблицы, образцы данных и точный запрос, который вы используете? – Olaf

+0

Я согласен с Олафом - кроме того, что DMBS вы используете? –

ответ

1
CAST(value AS int) 

http://msdn.microsoft.com/en-us/library/ms187928.aspx

Или вы могли бы CAST в decimal(x,y), если вы предпочитаете.

После того как вы сделали это числовым, вы можете выполнять числовые операции и сравнения на нем.
Обратите внимание, что если у вас CAST нечетное значение, запрос не удастся.

+0

Он не будет преобразовывать в Integer вообще, и я попытался выполнить приведение как десятичное, числовое, float и т. Д. Он преобразует поле в десятичное, числовое, но когда дело доходит до поиска тех, кто меньше 7, он действует как будто он не сделал преобразования и не может. – ThaddeusTG

+0

@ThaddeusTG: Что ты имеешь в виду? Не могли бы вы показать нам, как выглядит ваше фильтрующее состояние? Я уверен, что что-то вроде CAST ([result]. [Число] AS decimal (10,2)) <7' должно работать. –

+0

Я нашел проблему.При расширении поиска до всех результатов, полученных из результата ответа, я нашел результаты, которые имели «% ...%»,% # - #% и другие вещи, которые не являются и не могут быть числовыми. При этом я понял, что он не применял остальные критерии поиска, прежде чем пытаться выполнить преобразование, вызвавшее ошибку. Я вошел и добавил другие критерии, то есть случай, когда (бла-бла-бла), затем он был введен как числовой, и он работал. – ThaddeusTG