【问题标题】:SQLLite strftime not reading column valueSQLite strftime 不读取列值
【发布时间】:2020-03-13 16:13:48
【问题描述】:

我的 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

但第一列渲染正确,但函数列返回此错误 我尝试按照这些页面上的解决方案进行操作,但无济于事

get-month-from-datetime-in-sqlite

sqlite-convert-string-to-date

我已经尝试过此文档中的其他功能lang_datefunc.html 但是当我尝试将列引用作为参数传递时,我仍然遇到同样的错误 在函数中

【问题讨论】:

  • 将日期格式更改为 YYYY-MM-DD 即可。
  • @forpas 但如何在查询字符串中将8/1/2007 转换为08/01/2017?有出路吗?如果您能提供代码帮助,我会很高兴。因为我正在从一个已经存在的数据库中提取数据。
  • 一个非常复杂的字符串函数方式。
  • 我的建议是将表导入一个对日期和字符串更灵活的数据库(如 MySql),然后在那里进行转换并重新导入 SQLite。

标签: sql sqlite


【解决方案1】:

这个“我如何在查询字符串中将 8/1/2007 转换为 08/01/2017”没有帮助,因为这不是有效的 sqlite 时间字符串。如果 MySql 不是一个选项(它不适合我),您将不得不执行“复杂的字符串函数”。一旦它们被分解,这可能是相当直接的。

年份很简单,它是substr(adate,-12,4) 假设时间部分只有一位数字表示小时(否则为-13)。如果你真的只想要年份(基于'%Y'),那么鲍勃就是你的叔叔。

同样,这个月也很简单。利用 CAST 将文本转换为整数直到第一个非数字字符,并使用 printf 到 0 填充,这个 printf('%02i',CAST (adate as int)) 将给出月份。

这一天要打字多一点,因为你需要字符串的部分第一个'/'之后。这个printf('%02i',CAST (substr(adate,instr(adate,'/') + 1) as int)) 可以解决问题。

剩下的就是将它们全部连接在一起,中间加上一些-,瞧,这是一个有效的sqlite日期。

【讨论】:

    猜你喜欢
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 2020-09-14
    • 1970-01-01
    相关资源
    最近更新 更多