【问题标题】:INSERT INTO number value with comma thousand delimiterINSERT INTO 带有逗号千位分隔符的数值
【发布时间】:2015-03-17 03:56:22
【问题描述】:

我的 SQL 是

"INSERT INTO table1 (Item, Price) VALUE ('" & ItemString & "', " & PriceValue & ")"

它工作正常。但是,如果价格是12,345.67. SQL 错误消息是

查询值和目标字段的数量不同。

这是因为千位逗号分隔符的值。我应该如何修改我的SQL 以让数字值有逗号分隔符(和可能的 $ 符号)?

提前致谢。

【问题讨论】:

  • 你试过用双引号吗?
  • 价格列的数据类型是什么?
  • 双引号用于字符串数据类型。价格是单一数据类型。我在下面使用它并且它有效。 "INSERT INTO table1 (Item, Price) VALUE ('" & ItemString & "', " & Format(PriceValue,"General Number") & ")"

标签: ms-access sql-insert


【解决方案1】:

这是您必须始终使用 Str 将您的十进制数转换为美国格式的字符串表达式的地方,而忽略您的本地设置:

"INSERT INTO table1 (Item, Price) VALUE ('" & ItemString & "', " & Str(PriceValue) & ")"

关于 Str 的神奇之处在于 总是 插入一个点作为小数分隔符,仅此而已。这使它成为防弹和最简单的解决方案。

在小数点分隔符不是点的国际环境中,大多数其他方法都会失败。

【讨论】:

  • gr8 解决方案!我从来没有注意到这一点!
【解决方案2】:

您可以使用Recordset 代替INSERT INTO 查询:

Dim RS As DAO.Recordset
Set RS = CurrentDb.OpenRecordset("select * from table1 where 1=0")
RS.AddNew
RS("Item") = ItemString
RS("Price") = PriceValue
RS.Update
RS.Close
Set RS = Nothing

注意事项:

  • Recordset 自动处理所有令人讨厌的问题,例如不同的小数分隔符、字符串中的引号、正确的日期/时间值等等。
    所以你不需要搞乱字符串、转换数字等。
  • 为了使此代码正常工作,您的 Access 数据库需要引用 Microsoft DAO Object Library 的任何版本...在大多数较新的 Access 版本中应该已经是这种情况
  • WHERE 子句 (where 1=0) 是因为 Recordset 需要“连接”到表才能知道列名等。
    但我们只是追加新行,因此我们实际上不需要加载任何现有行,因此 where 1=0

【讨论】:

    【解决方案3】:

    以下查询假定您的Price 列的类型为MONEY

    "INSERT INTO table1 (Item, Price) VALUE ('" & ItemString & "', CAST(" & PriceValue & ") AS MONEY))"
    

    我将PriceValue 参数转换为MONEY 类型,只要它的格式为$XXX,XXX.XX,它应该可以工作

    【讨论】:

      【解决方案4】:

      由于 mysql 数据库中没有“货币”数据类型,因此只需存储该值。在前端将其格式化为货币。同样,您可以在插入表格之前处理价格以去除格式。

      【讨论】:

        【解决方案5】:

        在 sql 查询中不能将逗号附加到数字或整数值。 而是插入支持该列数据类型的值,并且可以转换为 UI 中所需的格式。 对于检索,您可以使用以下内容:

        从 testTbl 中选择 testCol,replace(convert(varchar,cast(Price as money),1), '.00','')。

        结果:

        testCol(无列名) 12,346 asd 12,346

        【讨论】:

          【解决方案6】:

          我在下面使用它并且它有效。

          INSERT INTO table1 (Item, Price) VALUE ('" & ItemString & "', " & Format(PriceValue,"General Number") & ")
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-08-11
            • 1970-01-01
            • 2017-04-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多