2017-02-08 15 views
0

У меня есть таблица, которая получает все значения, загружаемые в SQL Server. Одно из полей в электронной таблице - деньги. Теперь, чтобы все отображалось корректно - я добавил поле в свой tbl с помощью Money as DataType.Проблема с типом данных Деньги в SQL SERVER vs string

Когда я прочитал значение из таблицы, я в значительной степени сохранил его как строку, например ... "94259.4". Когда он вставлен в sql-сервер, он выглядит так: «94259.4000». Есть ли способ для меня в основном избавиться от 0 в значении сервера sql, когда я его беру из БД, потому что проблема, с которой я сталкиваюсь, заключается в том, что, хотя эти два значения одинаковы, поскольку они оба сравниваются как Строки - он думает, что нет одинаковых значений.

Я предвижу еще одну проблему, когда значение может выглядеть так ... 94,259.40 Я думаю, что может работать, это ограничение числа до 2 после периода. Так что пока я выбираю значение с сервера с этим форматом 94,259.40 - я худею, все должно быть в порядке.

EDIT:

For Column = 1 To 34 
    Select Case Column 
     Case 1 'Field 1 
      If Not ([String].IsNullOrEmpty(CStr(excel.Cells(Row, Column).Value)) Or CStr(excel.Cells(Row, Column).Value) = "") Then 
    strField1 = CStr(excel.Cells(Row, Column).Value) 
      End If 
     Case 2 'Field 2 
     ' and so on 

Я иду через каждое поле и сохранить значение в виде строки. Затем я сравниваю его с БД и вижу, есть ли запись с одинаковыми значениями. Единственное поле на моем пути - это поле денег.

+0

Какой инструмент вы используете для загрузки электронной таблицы в SQL Server? – user3272686

+6

Уродливый урок, давно извлеченный: никогда, никогда, никогда, НИКОГДА, НИКОГДА, eVeR, используйте тип данных MONEY в SQL Server. Это заставляет щенков болеть и вызывает дисбаланс во Вселенной. –

+0

@ user3272686 - не инструмент, просто открывающий таблицу и захватывающие значения (задающие поля и т. Д.) – BobSki

ответ

1

Вы можете использовать формат() для сравнения строк, или даже Float Например:

Declare @YourTable table (value money) 
Insert Into @YourTable values 
(94259.4000), 
(94259.4500), 
(94259.0000) 

Select Original = value 
     ,AsFloat = cast(value as float) 
     ,Formatted = format(value,'0.####') 
From @YourTable 

Возвращает

Original AsFloat  Formatted 
94259.40 94259.4  94259.4 
94259.45 94259.45 94259.45 
94259.00 94259  94259 

Я хотел бы отметить, что формат() имеет некоторые большие функциональные возможности, но он НЕ известен своей производительностью

0

Основная проблема заключается в том, что строковые данные используются для представления числовой информации, следовательно, проблемы, сравнивающие «123.400» с «123.4» и получение несоответствий. Они должны несоответствие. Они струны.

Решение состоит в том, чтобы хранить данные в электронной таблице в правильной форме - числовые, а затем выбрать правильный формат для базы данных, который НЕ является типом данных «Деньги» (вставляйте дрожь и видение стервятников, кружащих накладные расходы). В противном случае у вас будет расширяющееся количество конверсий между типами, когда вы идете вперед и назад между двумя неправильно разработанными решениями и находите все больше и больше случаев, которые «не совсем работают», и требуют более особых случаев ... и так далее.

+0

Достаточно честный! Не был разработан мной, нужно, чтобы он работал. Не думайте, что я могу изменить типы данных - слишком глубоко. – BobSki

+0

Достаточно честный backatcha :) Можете ли вы опубликовать запрос, который используете, чтобы извлекать данные из вашей таблицы (для сравнения)? –

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

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