SQL SERVER 与字符串中数据类型 Money 的问题

Issue with datatype Money in SQL SERVER vs string

我有一个电子表格,可以将所有值加载到 SQL 服务器中。电子表格中的字段之一恰好是金钱。现在为了正确显示所有内容 - 我在我的 tbl 中添加了一个字段,并将 Money 作为数据类型。

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

我预见到另一个问题,当值可能看起来像这样时...94,259.40 我认为可能有效的方法是在期间之后将数字限制为 2。所以只要我 select 来自服务器的值具有这种格式 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

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

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

解决方案是将数据以正确的形式存储在电子表格中 - 数字,然后 select 数据库的正确格式 - 这不是 "Money" 数据类型(插入颤抖和秃鹰在头顶盘旋的景象)。否则,当您在两个设计不当的解决方案之间来回切换时,类型之间的转换会越来越多,并且会发现越来越多 "don't quite work," 的边缘情况并需要更多特殊情况……等等.

您可以使用 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

Returns

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

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