sql - SQLLite strftime 不读取列值
问题描述
我在我的 Sqllite 数据库查询中有这个,我想要...
select BoardingDate, strftime('%Y', date(BoardingDate)) from Hostels;
但在输出中它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()
函数计算日期,但这是一种更长的方法,我现在只是感到困惑。谢谢。
这是我在消息面板中遇到的错误
select BoardingDate, strftime('%Y',BoardingDate)
> no such column: BoardingDate
> Time: 0s
但第一列正确呈现,但功能列返回此错误我尝试按照这些页面上的解决方案但无济于事
我已经尝试过此文档lang_datefunc.html中的其他函数, 但是当我尝试将列引用作为函数中的参数传递时,我仍然遇到相同的错误
解决方案
这个“我如何在查询字符串中将 8/1/2007 转换为 08/01/2017 ”将无济于事,因为这不是有效的 sqlite 时间字符串。如果 MySql 不是一个选项(它不适合我),你将不得不做“复杂的字符串函数”。一旦它们被分解,这可能是相当直截了当的。
年份很简单,substr(adate,-12,4)
假设时间部分只有一位数字表示小时(否则为 -13)。如果你真的只想要年份(基于'%Y'
),那么 bob 就是你的叔叔。
同样,这个月也很简单。利用CAST
它将文本转换为整数直到第一个非数字字符,并使用 printf 到 0 填充,这printf('%02i',CAST (adate as int))
将给出月份。
这一天要打字多一点,因为您需要第一个'/'之后的字符串部分。这printf('%02i',CAST (substr(adate,instr(adate,'/') + 1) as int))
会成功的。
剩下的就是将它们与它们之间的一些连接在一起-
,瞧,这是一个有效的 sqlite 日期。
推荐阅读
- c# - Nancy 模型绑定到子类。自动检测?
- node.js - moongoose js Schema不是构造函数和函数错误
- react-native - 没有键的减速器(反应原生)
- r - 展开包含 CSV 值的 R 数据框结构
- excel - 每个语句和 if 语句使用 2 个条件的范围
- java - 如何使用 Java 8 流使用集合流式传输地图?
- javascript - 包装 HOC 时访问 react-navigation 道具(绑定 this)?
- asp.net-core - HTTP POST 请求不起作用(CustomerViewModel=null)
- ruby-on-rails - gem Devise Sign Out 不在 Heroku 上工作,但在开发上工作就好了
- postgresql - PostgreSQL 11 中外部表的并行追加