оформить вопрос в человеческое время - PullRequest
1 голос
/ 28 февраля 2020
SELECT 
 prefix_grade_items.itemname AS Course,
 prefix_grade_items.grademax,
 ROUND(prefix_grade_grades_history.finalgrade, 0) 
 AS finalgrade,
 prefix_user.firstname,
 prefix_user.lastname,
 prefix_user.username,
 prefix_grade_grades_history.timemodified

 FROM
 prefix_grade_grades_history
 INNER JOIN prefix_user ON prefix_grade_grades_history.userid = prefix_user.id
 INNER JOIN prefix_grade_items ON prefix_grade_grades_history.itemid = 
 prefix_grade_items.id

 WHERE (prefix_grade_items.itemname IS NOT NULL)
 AND (prefix_grade_items.itemtype = 'mod' OR prefix_grade_items.itemtype = 'manual')
 AND (prefix_grade_items.itemmodule = 'quiz' OR prefix_grade_items.itemmodule IS NULL)
 AND (prefix_grade_grades_history.timemodified IS NOT NULL)
 AND (prefix_grade_grades_history.finalgrade > 0)
 AND (prefix_user.deleted = 0)
ORDER BY course

В настоящее время я пытаюсь выполнить запрос sh. Проблема, с которой я сталкиваюсь, заключается в использовании команды UNIX для преобразования времени, запрошенного из времени, в человеческое время. Это выходит в эпоху времени. Я пытался использовать такие команды, как FROM_UNIXTIME (отметка времени, '% a -% D% M% y% H:% i:% s') в качестве отметки времени. Для справки это adho c запрос к серверу moodle, содержащийся в MariaDB. Мой желаемый результат запроса состоит в том, что ничего не изменится в зависимости от результатов, которые мы получаем, за исключением того, что время будет в формате месяц / день / год вместо текущего.

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

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

DATE_FORMAT(FROM_UNIXTIME(`timestamp`), "%b-%d-%y")
0 голосов
/ 04 марта 2020

Как указано в вашем вопросе, где вы упоминаете FROM_UNIXTIME(timestamp,'%a - %D %M %y %H:%i:%s'), действительно возможно включить второй аргумент, чтобы указать конкретный c формат времени / даты, который вы будете sh выводить, преобразованный из UNIX метка времени.

Этот бит выглядит следующим образом: '%a - %D %M %y %H:%i:%s' - эта конкретная строка формата даст вам вывод, который выглядит примерно так: Fri - 24th January 20 14:17:09, который, как вы сказали, не совсем то, что вы искали, но мы можем это исправить!

Например, приведенное ниже утверждение вернет удобочитаемую дату (в соответствии со значением, возвращенным в метке времени) в виде месяца / дня / года, как вы указали в качестве цели в своем вопросе, и будет выглядит примерно так: Jan/01/20

FROM_UNIXTIME(timestamp), '%b/%d/%y')  

Если вместо этого вместо sh использовать 4 di git год, вы можете заменить строчную букву %y на заглавную %Y.

Кроме того, если вместо числа предпочтительнее число c, вы можете использовать %m вместо %b.

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

Так что все это собрано вместе заданный c контекст вашего исходного запроса SQL, использующий FROM_UNIXTIME для получения удобочитаемой даты (вместе со строкой подходящего формата для указания формата вывода) может выглядеть примерно так:

SELECT 
 prefix_grade_items.itemname AS Course,
 prefix_grade_items.grademax, 
 ROUND(prefix_grade_grades_history.finalgrade, 0) AS finalgrade,
 prefix_user.firstname,
 prefix_user.lastname,
 prefix_user.username, 
  FROM_UNIXTIME(prefix_grade_grades_history.timemodified, '%b/%d/%Y') AS grademodified

FROM
 prefix_grade_grades_history
INNER JOIN prefix_user ON prefix_grade_grades_history.userid = prefix_user.id
INNER JOIN prefix_grade_items ON prefix_grade_grades_history.itemid = prefix_grade_items.id

WHERE (prefix_grade_items.itemname IS NOT NULL)
 AND (prefix_grade_items.itemtype = 'mod' OR prefix_grade_items.itemtype = 'manual') 
 AND (prefix_grade_items.itemmodule = 'quiz' OR prefix_grade_items.itemmodule IS NULL) 
 AND (prefix_grade_grades_history.timemodified IS NOT NULL) 
 AND (prefix_grade_grades_history.finalgrade > 0) 
 AND (prefix_user.deleted = 0)
ORDER BY course  

ПРИМЕЧАНИЕ. В итоге я указал псевдоним для столбца timemodified, назвав его вместо grademodified. Это было сделано, поскольку без псевдонима имя столбца становится немного занятым :)

Надеюсь, что это полезно для вас! :)

...