SQLLite strftime не читает значение столбца - PullRequest
0 голосов
/ 13 марта 2020

У меня есть это в моем запросе базы данных 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

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

получить месяц от даты время в sqlite

sqlite-convert-string-to-date

я пробовал другие функции из этой документации lang_datefun c. html но я все еще получаю ту же ошибку, когда пытаюсь передать ссылку на столбец в качестве параметра функции

1 Ответ

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

Это " как мне преобразовать 01.08.2007 в 08.01.2017 в строке запроса " не поможет, так как это недопустимая строка времени sqlite. И если MySql не вариант (что не для меня), вам придется выполнить « сложные строковые функции ». Что может быть довольно простым, если они сломаны.

Год легкий, это substr(adate,-12,4) при условии , что у компонента времени есть только одна ди git в час (- 13 в противном случае). И если вы действительно хотите только год (основываясь на '%Y'), тогда Боб - ваш дядя.

Месяц, также, легкий. Используя CAST, который преобразует текст в целое число до первого отличного от нумерации символа c, и используя printf для ввода 0, этот printf('%02i',CAST (adate as int)) даст месяц.

День набирает немного больше, потому что вам нужна часть строки после первого '/'. Это printf('%02i',CAST (substr(adate,instr(adate,'/') + 1) as int)) сделает свое дело.

Осталось только объединить их вместе с некоторым - между ними, и вуаля, это действительная дата sqlite.

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