gpt4 book ai didi

sql - 如何在 VBA 逗号分隔列表中仅将引号放在字符串(而不是数字)上?

转载 作者:行者123 更新时间:2023-11-29 11:39:24 31 4
gpt4 key购买 nike

上下文: 我想将 Excel 电子表格中的一些数据导入 PostgreSQL 数据库。为此,我在 VBA 中建立了与数据库的连接,现在,我想对每一行执行一个 INSERT SQL 查询,例如

INSERT INTO mytable VALUES ('a','b',32,'d',17.2);

如果我们假设一个 pgSQL 表有 5 列,其中 2 列是数字。

使用数组和 VBA join 函数我已经想出了如何获取 Excel 表格的给定行并将其转换为列表其中每个项目都被引用,例如

('a','b','32','d','17.2');

我可以从中轻松编写 SQL 查询。

引用所有项目的缺点是,在插入时,postgreSQL 服务器必须将作为字符串传递的数值再次转换回数值。我担心这会影响性能,尤其是在需要处理 50000 多行的情况下。


问题:在这种情况下,我想找到一种解决方案,在将 VBA 数组转换为逗号分隔列表时仅将引号放在非数值上 不在列上使用 For 循环,这也会影响性能。

我当前将水平 Excel 范围转换为此类列表的 VBA 代码是:

myArray = Application.Transpose(Application.Transpose(myRange.Value))
myList = "('" & Join(myArray, "','") & "')"

(在上面的示例中,myArray 将是包含值 ("a","b",32,"d",17.2) 的 VBA 数组)。

最佳答案

在 Join 之前花几毫秒转换数组。

Dim myarray As Variant, mylist As String, i As Long

myarray = Application.Transpose(Application.Transpose(Range("a1:f1").Value2))

For i = LBound(myarray) To UBound(myarray)
If Not IsNumeric(myarray(i)) Then _
myarray(i) = Chr(39) & Trim(myarray(i)) & Chr(39)
Next i

mylist = "(" & Join(myarray, Chr(44)) & ")"
Debug.Print mylist

关于sql - 如何在 VBA 逗号分隔列表中仅将引号放在字符串(而不是数字)上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49458304/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com