我有一个csv文件要导入到ruby on rails上的sqlite3。 csv文件有一个日期列,格式为MM / DD / YYYY。 sqlite3中的日期格式为DD / MM / YYYY。如何在不更改csv文件的情况下转换为相同的格式?
答案 0 :(得分:2)
首先,您以错误的格式在SQLite中存储日期。从罚款SQLite manual:
<强> 2.2。日期和时间数据类型
SQLite没有预留用于存储日期和/或时间的存储类。相反,SQLite的内置日期和时间函数能够将日期和时间存储为
TEXT
,REAL
或INTEGER
值:
TEXT
为ISO8601字符串(&#34; YYYY-MM-DD HH:MM:SS.SSS&#34;)。- [...]
在SQLite中存储日期的推荐方法是使用ISO-8601格式(text
)在YYYY-MM-DD
列中,以便您可以使用SQLite函数来处理它们他们会正确比较/排序。
明智的做法是使用Ruby标准库中的Date.strptime
来解析传入的日期:
date = Date.strptime(date_string_from_csv, '%m/%d/%Y')
然后使用Date#iso8601
方法将其转换为ISO-8601日期字符串:
date_for_sqlite = date.iso8601
然后将date_for_sqlite
发送到数据库中。作为奖励,任何理智的数据库都将明确地理解ISO-8601格式的日期,因此如果您切换数据库,则不必担心此问题。
如果您必须使用非标准DD/MM/YYYY
格式,请使用strftime
:
date_for_sqlite = date.strftime('%d/%m/%Y')