2011-10-07 186 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

相關問題