2016-02-23 79 views
-1

我一直無法弄清楚如何在Ruby中將其他列(而不是行)寫入CSV文件。在這種情況下,它們是SQL查詢。將列(SQL查詢)添加到Ruby中的CSV文件

的片段我的代碼:

month = mysql.query("SELECT DATE_FORMAT(company_db.dates.starting_date,'%m') FROM company_db.dates.starting_date;") 

day = mysql.query("SELECT DATE_FORMAT(company_db.dates.starting_date,'%d') FROM company_db.dates.starting_date;") 

year = mysql.query("SELECT DATE_FORMAT(company_db.dates.starting_date,'%Y') FROM company_db.dates.starting_date;") 

CSV.open("Dates.csv, "wb") do |csv| 
    csv << ["Month", "Day", "Year"] 
    csv << [(month.each {|row| csv << row}), (day.each {|row| csv << row}), (year.each {|row| csv << row})] 
end 

輸出我得到:

Month, Day, Year 
1, 
. 
. 
. 
12, 
1, 
. 
. 
. 
31, 
1970, 
    . 
    . 
    . 
2015 

和輸出我的願望:

Month, Day, Year 
1, 1, 1970 
. . . 
. . . 
. . . 
12, 31, 2015 

謝謝您的幫助。

+1

你爲什麼不結合你的三個SQL語句成一個? mysql.query(「SELECT DATE_FORMAT(company_db.dates.starting_date,'%m'),DATE_FORMAT(company_db.dates.starting_date,'%d'),DATE_FORMAT(company_db.dates.starting_date,'%Y')FROM company_db .dates.starting_date;「)' – archana

+0

我知道該怎麼做。這不是我問的問題。 – EVAL

+0

你能顯示你的查詢的輸出對象嗎? – archana

回答

1

我相信Enumerable.zip是您正在尋找的方法。

鑑於你的三個疑問:

csv << [ 'Month', 'Day', 'Year' ] 
csv << month.zip(day, year) 
+0

我得到以下錯誤: '的iMac:工作區的人$紅寶石File.rb File.rb:105:在 '塊在

':未定義的方法 '拉鍊' 爲#(NoMethodError ) \t from /Users/guy/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/csv.rb:1282:in'open' \t from:File:103:in'
'' 我也使用了你的確切代碼。 – EVAL

+0

不知道你用於Mysql連接的是哪個Gem,我在跳躍,結果公開的.each接口來自Enumerable,顯然這與你正在使用的不同。 'mysql2'和'sequel'(gems)都支持使上述工作成功的Enumerable接口。 –

+0

'mysql2' gem將查詢記錄爲一個'hash => value'對,而不是一個數組,所以我可能需要更多地使用我的代碼才能使它工作。它確實按列而不是行添加了所有內容,所以這確實幫了我很多。謝謝。 – EVAL

-1
results = mysql.query("SELECT DATE_FORMAT(company_db.dates.starting_date,'%m') AS month, DATE_FORMAT(company_db.dates.starting_date,'%d') AS date, DATE_FORMAT(company_db.dates.starting_date,'%Y') AS year FROM company_db.dates.starting_date;") 

CSV.open("Dates.csv, "wb") do |csv| 
    csv << ["Month", "Day", "Year"] 
    results.each do |row| 
    csv << [row.month, row.date, row.year] 
    end 
end 
+0

您的意思是: 'CSV.open(「Dates.csv,」wb「)do | csv | csv << [」Month「,」Day「,」Year「] mysql.query(」SELECT DATE_FORMAT(company_db.dates.starting_date,'%m'), DATE_FORMAT(company_db.dates.starting_date,'%d'), DATE_FORMAT(company_db.dates.starting_date,'%Y') FROM company_db.dates.starting_date ;「)。{| row | csv << row} end' 不回答我的問題。 – EVAL

+0

「AS月份」等會給出錯誤。這也是多餘的,因爲'csv << [「Month」,「Day」,「Year」]'已經建立了列標題。我設置單獨的查詢等於不同的變量,因爲我最終需要拆分行並根據我從數據庫中提取的日期來操作行數。即如果開始日期早於一行,則該行在分割期間將獲得更多行。我也無法找到另一個直接回答這個問題的問題。我希望能得到那個答案。 – EVAL