【问题标题】:issue formatting into human time问题格式化到人类时间
【发布时间】:2020-02-28 19:30:15
【问题描述】:
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 服务器的临时查询。我想要的查询结果是,就我们得到的结果而言,什么都不会改变,除了时间将采用月/日/年格式而不是当前格式。

【问题讨论】:

  • 你能澄清什么是有效的或无效的吗?您提到使用 FROM_UNIXTIME 函数,但这不起作用吗?

标签: sql unix moodle adhoc-queries


【解决方案1】:

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

DATE_FORMAT(FROM_UNIXTIME(`timestamp`), "%b-%d-%y")

【讨论】:

    【解决方案2】:

    正如您在提到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

    有关可用于构建格式字符串的可用说明符的更全面参考,this page has a handy table

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

    希望对你有帮助! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-03
      • 2018-02-13
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 2011-09-09
      • 2022-11-09
      • 2012-03-03
      相关资源
      最近更新 更多