2016-10-31 17 views
0

Я использую Microsoft SQL Server 2008 R2.Поиск номеров технических форматов при сохранении в формате varchar

У нас есть базы данных, которые я должен поддерживать на работе, и все фактические значения хранятся в виде varchar, длинной истории за всем этим.

Из-за программного обеспечения для отчетности мы используем наши числа, которые нужно преобразовать в десятичные числа. SQL Server не кажется, чтобы быть в состоянии преобразовать научную нотацию в десятичную

EX: 6.54E-6

Я пытался делать поиск всех значений, таких как «% е%» в надежде найти их все то я мог бы вручную преобразовать их в обычные форматы чисел ... однако это не сработало.

Есть ли способ, которым я могу массово конвертировать? Или, по крайней мере, искать все значения, содержащие E ??

Я пробовал поиск E, и я не могу найти значения < данного номера .. потому что они хранятся как varchar.

Любые идеи были бы высоко оценены, я, вероятно, не буду смотреть на это в течение нескольких часов (я не буду работать снова в течение 12 часов, поэтому, если я не буду отвечать сразу, вот почему). Большое спасибо за продвинутое решение, это избавит меня от поиска.

+0

Что запрос вы пытались для «массового обращенного? –

+0

@TT Я не знаю, как использовать для массового конвертирования. Как я понял, проблема заключалась в попытке запуска запросов в диапазоне дат и медленном сужении диапазона дат, чтобы найти 1 конкретную запись и машину. – Neal

ответ

0

Вы просто должны быть в состоянии привести значение к поплавку:

select (case when isnumeric(val) = 1 then cast(val as float) end) 
from t; 

Как ни странно, один из недостатков isnumeric() в большинстве случаев является то, что она признает научную нотацию. Здесь это преимущество.

В SQL Server 2012+, вы можете использовать try_convert():

select try_convert(float, val) 
from t; 
+0

Моя единственная проблема с вашим сообщением - я использую SQL Server 2008. Я просто попробовал запрос и, похоже, работал. То, что делали наши отчеты, было «cast (Value as Decimal (18,2))», если я изменил это на «cast (Value as float)», он завершил запрос. Мне придется подождать до сегодняшнего вечера, чтобы попробовать это на самом производственном оборудовании. – Neal

 Смежные вопросы

  • Нет связанных вопросов^_^