为什么我的 JulianDay 在尝试获取两个日期之间的天数时返回 null

Why is my JulianDay returning null when trying to get number of days between two dates

你好我想在我的 tables arrivaldatedeparturedate 之一中获取两个日期之间的天数但是我不知道为什么我的 JulianDay 返回空值.

Select Cast ((
JulianDay(datetime(departuredate)) - JulianDay(datetime(arrivaldate))) As Integer) 
from booking;

我的table

CREATE table Booking(
  BookingID INTEGER PRIMARY KEY autoincrement, 
  BCustomerID INTEGER NOT NULL, 
  arrivaldate VARCHAR(10) NULL, 
  departuredate VARCHAR(10) NULL, 
  paymentmethod VARCHAR (45)NULL, 
  RoomType VARCHAR (20)
);

INSERT INTO Booking(BCustomerID,arrivaldate,departuredate,paymentmethod,RoomType) VALUES 
(1,'2018/07/02','2018-07-10','Card','Single'), 
(2,'2018/07/12','2018-07-18','Cash','Double'), 
(3,'2018/07/12','2018-07-19','Cash','Single'), 
(4,'2018/07/06','2018-07-07','Card','Double'), 
(5,'2018/08/14','2018-08-24','Card','Triple'), 
(6,'2018/09/01','2018-09-04','Cash', 'Quad');

SQLite 的日期时间函数,如 datetime()julianday() 仅适用于 'YYYY-MM-DD' 格式的日期或 'YYYY-MM-DD hh:mm:ss.sss'.
格式的日期时间 您的日期包含 '/' 而不是 '-'(仅在 arrivaldatedeparturedate 中?)。
使用函数 replace():

SELECT CAST (
         julianDay(REPLACE(departuredate, '/', '-')) - 
         julianDay(REPLACE(arrivaldate, '/', '-'))
         AS integer
       ) AS days
FROM booking;

或者更好地更新 table 以便您的日期适合 SQLite 格式:

UPDATE booking
SET arrivaldate = REPLACE(arrivaldate, '/', '-'),
    departuredate= REPLACE(departuredate, '/', '-')

然后你可以做:

SELECT CAST(julianDay(departuredate) - julianDay(arrivaldate) AS integer) AS days
FROM booking;

参见demo