2012-12-24 144 views
1

更改日期格式,这是在sqlite db 12/10/11 to 12-10-11 (mm-dd-yy)我无法这样做。我是一个noob在sqlite中,并且必须解析此值SELECT strftime('%d-%m-%Y',Date) from report但我得到null作为sqlite数据库除了值在mm-dd-yy所以如何转换格式12/10/11 to 12-10-11 (mm-dd-yy)。提前感谢。真的很感谢帮助。在sqlite中更改日期格式

+2

从您的描述来看,这听起来像数据首先不是_stored_。在这种情况下,为了转换它,你必须自己做,或者将它存储为SQLite认可的可以格式化的日期。 – mah

+0

你可以尝试'日期',我认为日期必须有''。带上引号 – hakiko

+0

查看[这里](http://www.sqlite.org/datatype3.html)中的“日期和时间数据类型”。基本上,SQLite没有日期数据类型,但有一些首选格式。如果您的日期存储格式与首选格式不同,那么您必须选择“原始”值而不是使用内置日期/时间函数。 –

回答

1

简短的回答:

如果你有一个文本字符串存储为"12/10/11",你希望报告为"12-10-11",你应该使用replace(X,Y,Z)功能,具有Z取代的Y出现在X。因此:

SELECT replace('12/24/11','/','-'); 

将返回:

12-10-11 

长的答案:

首先,日期并不实际存在的SQLite中适当的数据类型。它们存储为TEXT,REAL或INTEGER值。请参阅date and time datatype in SQLite。所以这取决于你的日期如何存储在数据库中。

其次,您似乎暗示您以“mm/dd/yy”格式存储日期。这不是一个有效/有用的TEXT格式来存储日期/时间值(因为日期不能排序,不能用于“大于”和“小于”操作,不能用于SQLite日期函数等)。您确实需要使用date and time functions文档的“时间字符串”部分中列出的格式之一来存储日期时间值。

因此,通常您应该将日期/时间值存储为其中一种格式,使用NSDateFormatter将其从数据库中检索时转换为NSDate。而当你想在你的应用中显示日期值时,使用任何你想要输出的格式。

但是,如果你不关心的日期存储为文本字符串,并不能有效地使用在SQLite的日期,然后只把它当作一个普通的老TEXT串并使用TEXT功能,如replace(X,Y,Z)更换如上所述,出现"/""-"

+0

感谢Rob.I有另一个插件查询请帮助我。我已经使用这个查询**从报告**中选择strftime('%Y',替换(Date,'/',' - '))。我试图实现这一点 - http://stackoverflow.com/questions/ 14019624/sqlite-query-to-find-sum-of-a-year-by-given-dates –

+0

我不认为你可以使用这些日期函数,除非日期字段是在那些列出的格式之一我在我的回复中引用了doc。值得注意的是,它需要采用'YYYY-MM-DD'格式(注意也是四个字符年)。或者,如果您的日期不是有效的日期格式,则可以使用简单的'substr(date,7,2)'从MM-DD-YY格式中获取两位数的年份。 – Rob