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

时间:2017-02-08 17:01:42

标签: sql-server string type-conversion money-format

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

当我从电子表格中读取值时,我几乎将它存储为字符串,例如... “94259.4”。当它被插入sql server时,它看起来像“94259.4000”。当我从DB中获取它时,有没有办法让我基本上摆脱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领域。

2 个答案:

答案 0 :(得分: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()有一些很棒的功能,但它的性能并不为人所知

答案 1 :(得分:0)

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

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