2011-10-07 192 views
3

我需要从下面找到所有唯一值并将它们传递给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")") 

任何帮助或指针与本会非常赞赏

回答

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}" 
+0

出色的伴侣,正是我所需要的! – user983597

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(我怀疑我的记忆是在玩我的伎俩,那是我第一次看到干涉的地方)。

+3

'clojure.string/join'已经做到了。不要用'apply str' /'interpose'手动滚动。 – amalloy

相关问题