1
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

目前我正在尝试完善这个查询。我遇到的问题是使用 UNIX 命令将查询的时间从 timemodified 转换为 Human time。它出现在时代。我一直在尝试使用诸如 FROM_UNIXTIME(timestamp,'%a - %D %M %y %H:%i:%s') 之类的命令作为时间戳。作为参考,这是对 MariaDB 中包含的 moodle 服务器的临时查询。我期望的查询结果是,就我们得到的结果而言,没有任何变化,除了时间将采用月/日/年格式而不是当前格式。

4

2 回答 2

1

我已在我的选择查询中使用以下命令将时间戳转换为自定义日期格式。

DATE_FORMAT(FROM_UNIXTIME(`timestamp`), "%b-%d-%y")
于 2020-02-29T07:17:01.490 回答
0

正如您提到的问题中所包含的FROM_UNIXTIME(timestamp,'%a - %D %M %y %H:%i:%s'),确实可以包含第二个参数,以指定您希望从 UNIX 时间戳转换的输出的特定时间/日期格式。

这看起来像:'%a - %D %M %y %H:%i:%s'- 这个特殊的格式字符串会给你一个看起来像这样的输出:Fri - 24th January 20 14:17:09,正如你所说的,这不是你想要的,但我们可以解决这个问题!

例如,下面的语句将以您在问题中指定为目标的月/日/年的形式返回人类可读的日期(根据时间戳中返回的值),并且看起来类似于:Jan/01/20

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

如果您希望使用 4 位数年份,则可以用小写字母代替大写%y字母%Y

%m此外,如果首选数字月份,您可以使用%b.

有关可用于构建格式字符串的可用说明符的更全面参考,此页面有一个方便的表格

因此,将它们放在原始 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。这样做是因为没有别名,列名最终会变得有点忙:)

希望对你有帮助!:)

于 2020-03-04T17:15:38.433 回答