Функции SQLlite в формате даты ГГГГ-ММ-ДДЧЧ: ММ: СС.ССС + 0000 - PullRequest
0 голосов
/ 29 марта 2020
select  
    datetime(SVMXC__Scheduled_Date_Time__c), 
    SVMXC__Scheduled_Date_Time__c 
from table_a 

Возвращает ноль для функции datetime.

Я хотел бы получить разницу между

datetime(SVMXC__Scheduled_Date_Time__c) - datetime('now') 

2020-04-26T17:45:00.000+0000 - это дата, сохраненная как varchar.

1 Ответ

0 голосов
/ 29 марта 2020

Чтобы это работало, ваша дата должна иметь формат, распознаваемый SQLite. Вот два варианта:

Если смещение всегда равно +0000, как показано в вопросе, то вы можете просто удалить его. Это дает вам формат YYYY-MM-DDTHH:MM:SS.SSS, который SQLite понимает:

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
...