我在Sqllite数据库查询中有这个,我想…
select BoardingDate, strftime('%Y', date(BoardingDate)) from Hostels;
但是在输出中它可以BoardingDate正确渲染,并且输出
BoardingDate
BoardingDate Month ------------------------- 8/1/2007 0:00:00 null 3/1/2008 0:00:00 null 8/1/2008 0:00:00 null 3/1/2009 0:00:00 null
这些是查询的当前行为
1. strftime('%Y', date('now')) - outputs correctly 2. strftime('%Y', date('2020-03-06')) - it works also 3. strftime('%Y', date(BoardingDate)) - Gives an error, it doesnt render at all.. 4. strftime('%Y', date(Hostels.BoardingDate)) - The same error... 5. strftime('%Y', datetime(BoardingDate)) - Gives an error, 6. strftime('%Y', datetime(Hostels.BoardingDate)) - doesnt work....
它打印字符串,我不知道为什么。它以这种方式工作。我正在尝试使用该julianday()函数计算日期,但是那是一个更长的方法,我现在很困惑。谢谢。
julianday()
这是我在消息面板中得到的错误
select BoardingDate, strftime('%Y',BoardingDate) > no such column: BoardingDate > Time: 0s
我已经尝试过本文档lang_datefunc.html中的其他函数, 但是当我尝试将列引用作为函数中的参数传递时,我仍然遇到相同的错误
这种“ 如何在查询字符串 中将 2007年8月1日转换为2017年8月1日 ”将无济于事,因为这不是有效的sqlite时间字符串。而且如果MySql不是一个选项(这对我来说不是),那么您将不得不执行“ 复杂的字符串函数 ”。一旦它们分解,这可能是相当简单的。
年份很简单,substr(adate,-12,4) 假设 时间部分的小时数只有一位数字(否则为-13)。如果您真的只想要年份(基于'%Y'),那么bob是您的叔叔。
substr(adate,-12,4)
'%Y'
同样,本月也很容易。利用CAST它将文本转换为整数,直到第一个非数字字符,并使用printf到0 pad,这printf('%02i',CAST (adate as int))将给出月份。
CAST
printf('%02i',CAST (adate as int))
那天要输入一些内容,因为您需要在字符串的第一个’/’ 之后添加 部分。这printf('%02i',CAST (substr(adate,instr(adate,'/') + 1) as int))将达到目的。
printf('%02i',CAST (substr(adate,instr(adate,'/') + 1) as int))
剩下的就是将它们全部与它们-之间的一些连接在一起,瞧,这是一个有效的sqlite日期。
-