【问题标题】:MySQL Date format QuestionMySQL日期格式问题
【发布时间】:2011-04-01 03:19:45
【问题描述】:

如何在 mysql 中将 2010 年 8 月 6 日 03:41:44 GMT+00:00 转换为 mm/dd/yy 时间?

我基本上想对这个 SentDate 列进行排序(数据是从外部来源填充的)。 我也可以在 c# 中执行此操作。

【问题讨论】:

  • 将这些日期存储为DATETIME 类型,您的生活会更轻松。

标签: c# .net mysql datetime


【解决方案1】:

如果你想在你的选择语句中转换它,使用following:

SELECT DATE_FORMAT(date, '%m/%d/%y')
FROM   TableName

如果你想在代码中做到这一点。

DateTime dt = Convert.ToDateTime(mySqlCommand.ExecuteScalar());
string strDateTime = dt.ToString("MM/dd/yy");

希望这会有所帮助。

【讨论】:

  • SELECT DATE_FORMAT('06 Aug 2010 03:41:44 GMT+00:00', '%m/%d/%y') 返回错误 - 日期时间不正确
  • 而且这个值来自表中的列?
  • 你也可以试试 STR_TO_DATE('06 Aug 2010 03:41:44 GMT+00:00', '%m/%d/%y')。我现在无法访问 mysql 进行测试,抱歉。
【解决方案2】:

等一下。您想将其转换为 mm/dd/yy 格式,还是按日期/时间对其进行排序?两者互不相让。

排序

如果该列在MySQL中已经是datetime列,则可以正常排序:

var query = db.MyTable.Where(...)
    .OrderBy(row => row.SentDate);

如果该列是 string 列 (varchar),那么您需要在从数据库中读取数据时将数据转换为 DateTime 对象,然后 在 C# 中对其进行排序。例如:

var query = db.MyTable.Where(...)
    .AsEnumerable()
    .Select(row => new { row, Sent = DateTime.Parse(row.SentDate) })
    .OrderBy(inf => inf.Sent);

AsEnumerable 的调用会导致数据被检索,因此 DateTime 解析和排序发生在 C# 中,而不是在 DB 中。

转换为 mm/dd/yy

​​>

以您描述的格式将DateTime 转换为string 的一种方法是明确使用.ToString

datetime.ToString("MM/dd/yy")

另一个是利用美式文化:

datetime.ToString("d", CultureInfo.GetCultureInfo("en-US"))

但是,后者似乎使用个位数的月份。

一旦您将 DateTime 转换为这样的字符串,对其进行排序就没有意义了,因为您将按月份的第一个数字对其进行排序——没有人会发现这很有用。

【讨论】:

    【解决方案3】:

    如果您想为您的日期时间字段获取特定格式,您可以执行以下操作:

    select 
        concat(
            month(date_field),
            "/",
            day(date_field),
            "/",
            year(date_field)
        ) 
    as 
        formatted_date 
    from 
        myTable;
    order by
        date_field asc;
    

    但是,我不确定这是否适用于其他字段类型 - 不过可能会很好,所以可以尝试。

    【讨论】:

      猜你喜欢
      • 2019-05-08
      • 2011-09-20
      • 2014-04-01
      • 1970-01-01
      • 2016-01-25
      相关资源
      最近更新 更多