0

我有一个电子表格,可以将所有值加载到 SQL Server 中。电子表格中的字段之一恰好是钱。现在为了正确显示所有内容 - 我在我的 tbl 中添加了一个字段,其中 Money 作为 DataType。

当我从电子表格中读取值时,我几乎将其存储为字符串,例如 ... "94259.4"。当它被插入 sql server 时,它看起来像这样"94259.4000"。当我从数据库中获取 sql server 值时,有没有办法基本上摆脱 sql server 值中的 0 - 因为我遇到的问题是 - 即使这两个值相同 - 因为它们都是比较的作为字符串 - 它认为没有相同的值。

当值可能看起来像这样时,我预见到另一个问题...... 94,259.40 我认为可能有效的方法是将数字限制为 2 之后。所以只要我从服务器中选择这种格式的值 94,259.40 - 我觉得我应该没问题。

编辑:

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

我遍历每个字段并将值存储为字符串。然后我将它与数据库进行比较,看看是否存在具有相同值的记录。在我看来,唯一的字段是 Money 字段。

4

2 回答 2

1

您可以使用 Format() 来比较字符串,甚至是 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

我应该注意到 Format() 有一些很棒的功能,但它的性能并不为人所知

于 2017-02-08T18:05:24.853 回答
0

核心问题是字符串数据被用来表示数字信息,因此比较“123.400”和“123.4”并出现不匹配的问题。他们应该不匹配。它们是字符串。

解决方案是以正确的形式将数据存储在电子表格中 - 数字,然后为数据库选择适当的格式 - 这不是“金钱”数据类型(插入颤抖和秃鹫在头顶盘旋的景象)。否则,当您在两个设计不当的解决方案之间来回切换时,您将在类型之间进行大量转换,并发现越来越多“不太有效”的边缘情况,需要更多特殊情况......等等。

于 2017-02-08T17:42:59.453 回答