【问题标题】:SQLlite functions on date format YYYY-MM-DDTHH:MM:SS.SSS+0000日期格式 YYYY-MM-DDTHH:MM:SS.SSS+0000 的 SQLite 函数
【发布时间】:2020-07-09 10:28:00
【问题描述】:
select  
    datetime(SVMXC__Scheduled_Date_Time__c), 
    SVMXC__Scheduled_Date_Time__c 
from table_a 

为 datetime 函数返回 null。

我想了解一下

datetime(SVMXC__Scheduled_Date_Time__c) - datetime('now') 

2020-04-26T17:45:00.000+0000 是存储为varchar 的日期。

【问题讨论】:

  • 请提供样本数据和预期结果。
  • 您的主题行中的时间格式不是一个 sqlite 可以理解的,并且减去 datetime() 返回的字符串无论如何都不会起作用。见sqlite.org/lang_datefunc.html
  • 2020-04-26T17:45:00.000+0000 是存储为 varchar 的日期。感谢您的 cmets

标签: sql sqlite date date-difference


【解决方案1】:

为此,您需要您的日期具有 SQLite 可识别的格式。这里有两个选项。

如果偏移量始终为+0000,如问题所示,那么您可以将其删除。这为您提供了 SQLite 可以理解的YYYY-MM-DDTHH:MM:SS.SSS 格式:

substr(SVMXC__Scheduled_Date_Time__c, 1, 23)

有了这个值,您就可以使用julianday() 计算到现在的差值,以天数表示:

select
    SVMXC__Scheduled_Date_Time__c,
    julianday(substr(SVMXC__Scheduled_Date_Time__c, 1, 23)) - julianday('now') diff
from mytable

--

另一方面,如果您确实需要考虑偏移量,那么 SQLite 期望 : 介于小时和分钟之间,因此您需要将其插入到字符串中:

substr(SVMXC__Scheduled_Date_Time__c, 1, 25) 
    || ':' 
    || substr(SVMXC__Scheduled_Date_Time__c, 1, -2)

然后:

select
    SVMXC__Scheduled_Date_Time__c,
    julianday(
        substr(SVMXC__Scheduled_Date_Time__c, 1, 25) 
            || ':' 
            || substr(SVMXC__Scheduled_Date_Time__c, 1, -2)
    ) - julianday('now') diff
from mytable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    相关资源
    最近更新 更多