我需要从下面找到所有唯一值并将它们传递给sql查询。下面是我想要做的一个例子,我实际上从两个文件中获取数据并将它们组合在一起并获得唯一值。
我的问题是我想将值放在sql IN()
子句中但是我在分隔值时遇到麻烦
我尝试过使用替换,但这对我来说似乎不起作用
(def snapshot
#{{:id "1234" :mtm "101" :pv"200"}
{:id"1235" :mtm "101" :pv"200"}
{:id"10234" :mtm "101" :pv"200"}
{:id"12034" :mtm "101" :pv"200"}
{:id"127" :mtm "101" :pv"200"}}
)
(def snapshot1
#{{:id"1238" :mtm "104" :pv"200"}
{:id"234" :mtm "101" :pv"200"}
{:id"124" :mtm "101" :pv"200"}
{:id"123" :mtm "101" :pv"200"}
{:id"134" :mtm "101" :pv"200"}}
)
(def SNAPSHOT-IDsT (set (map :id snapshot)))
(def SNAPSHOT-IDsT1 (set (map :id snapshot1)))
(def id-in-one-file-only (difference SNAPSHOT-IDsT1 SNAPSHOT-IDsT))
(println id-in-one-file-only)
这给了我{1238 123 134 234 124}
如何编辑这些结果以向我{1238, 123, 134, 234, 124}
然后我可以将它传递给字符串
(str "Select * from table where id in ("id-in-one-file-only")")
非常感谢任何帮助或提示
答案 0 :(得分:1)
difference
会返回一个集合,因此我假设您有#{1238 123 134 234 124}
个结果。如何格式fn:
user=> (defn format-ids [s]
(str "{"
(reduce #(str %1 ", " %2) s)
"}"))
user=> (format-ids #{1238 123 134 234 124})
"{134, 234, 1238, 123, 124}"
答案 1 :(得分:0)
interpose
很适合这类事情:
德尔>
user=> (apply str (interpose \, #{1238 123 134 234 124}))
"134,234,1238,123,124"
编辑:amalloy非常正确,clojure.string/join
效率更高implementation。
我上面做的是clojure.contrib v1.0 str-join中的内容(我怀疑我的记忆在我身上耍花招,这是我在第一时间看到插入的地方)。