Как правильно запрашивать / форматировать даты - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь построить функцию для моей базы данных SQlite, используя python. Цель этой функции - извлечь любую дату из поля calib_date, которая находится на расстоянии от 1 до 5 дней от текущей даты.

Я пытался связываться с моим форматом на самой таблице, думая, что это проблема форматирования. Функция по-прежнему ничего не тянет.

def datecheck():
    conn = sqlite3.connect("Calibration_Monitor.db")
    cur = conn.cursor()
    cur.execute("SELECT Serial, Calibration_Date from Masterlog where date(Calibration_Date) < (SELECT DATETIME('now', '+5 days'))")
    print(cur.fetchall())
    conn.commit()
    conn.close()

Надеясь, кто-нибудь может помочь мне разгадать эту тайну!

Всё помогает:)

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Используйте -5 НЕ +5, если ваша дата Calibration_Date прошла.(Основываясь на моем комментарии выше).Это даст вам все записи старше 5 дней в прошлом.

.......where date(Calibration_Date) < date('now','-5 day')

Что-то вроде:

SELECT Serial, Calibration_Date from Masterlog where date(Calibration_Date) < date('now','-5 day')

Если вы хотите последние пять дней данные

SELECT Serial, Calibration_Date FROM Masterlog WHERE Calibration_Date BETWEEN date('now') AND date('now', '-5 days')
0 голосов
/ 17 апреля 2019

Вы должны ссылаться на дату без date(), если столбец отформатирован как столбец даты, но используйте date(Calibration_Date), если это не так.

Также для получения второй части вам не нужны дополнительныеSELECT там.См. Ниже исправление и этот ответ для получения дополнительной информации.

def datecheck():
    conn = sqlite3.connect("Calibration_Monitor.db")
    cur = conn.cursor()
    cur.execute("SELECT Serial, Calibration_Date FROM Masterlog WHERE Calibration_Date < date('now', '+5 days')")
    print(cur.fetchall())
    conn.commit()
    conn.close()

Теперь, если вы имели в виду даты BETWEEN 1 и 5 дней, а не любая дата до 5 дней, вы хотели бы использовать что-то вроде:

cur.execute("SELECT Serial, Calibration_Date FROM Masterlog WHERE Calibration_Date BETWEEN date('now') AND date('now', '+5 days')")

Редактировать: Если вы намереваетесь даты в прошлом, а не в будущем, вы должныизмените его на +5 days.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...