【问题标题】:How do I display dates in gridview column in format of mm/yyyy?如何以 mm/yyyy 格式在 gridview 列中显示日期?
【发布时间】:2012-04-23 16:06:24
【问题描述】:

据我在网上找到的说法

SELECT DATEPART(MONTH,columnName),DATEPART(YEAR,columnName)

这样做并在 2 列中列出结果。我需要的是在 single 列中以 mm/yyyy 等格式显示数据库(MS SQL)中的日期。

有没有办法在一列中显示?

【问题讨论】:

  • 你能澄清一下吗,你的标题是mm-yyyy,但问题正文是mm/yyyy。差别不大,但我们希望答案准确并能反映您的最终目标。
  • @Aron,是mm/yyyy。我用以下语句解决了我的问题:SELECT RIGHT(CONVERT(VARCHAR(10),columnName,103),7)[DATE1] FROM tableName。我的项目要求是通过发送日期作为参数来显示存储在 MS SQL 中的日期列。所以我创建了组合框并将日期存储为 dd/MM/yyyy 格式的字符串。通过上面写的查询和以这种格式填充的日期,我可以在我的应用程序中从数据库中检索结果,但是如果我以 MM/yyyy 格式将日期作为参数发送,我将无法做到这一点。我对此感到困惑,因为我以所需格式从 sql server 检索数据?
  • 您需要将表示与数据分开。例如,您应该以任何有意义的区域格式显示日期,但您应该向 SQL Server 发送安全且明确的日期(例如 YYYYMMDD)。当然,您的组合框控件可以帮助您指定发送回 SQL Server 的字符串的格式...
  • 非常感谢:) 现在一切都清楚了。

标签: sql-server datepart


【解决方案1】:

由于您明确要求GridView,因此最好在最后一个位置格式化日期时间。所以我建议使用.NET 方法作为String.FormatToString

String formatted = date.ToString("MM-yyyy");

或者用BoundFieldDataFormatString

<asp:GridView ID="GridView1" runat="server">
    <Columns>
       <asp:BoundField DataFormatString="{0:MM-yyyy}" DataField="DateField" HeaderText="Date" ReadOnly="True" />
    </Columns>
</asp:GridView>

【讨论】:

  • mm 还是MM?在 SQL Server 2012 的 FORMAT() 版本(源自 .NET 版本)中,mm 给了我几分钟,而不是几个月。
  • @AaronBertrand:正如我所指出的,我根本不会使用 dbms 来格式化或转换日期时间字段。因此上面是C#。也许他需要程序中另一个位置的日期时间,因此您经常需要转换字符串。
  • 但在 C# 中 mm 真的是月数而不是分钟数?我理解您反对在数据库中格式化,但有时它是适当的(例如,考虑同一查询的多个消费者,用不同的语言编写并由不同的团队维护)。
  • 是的,DateTime.Now.ToString("mm-yyyy") 始终返回 04-2012,独立于客户端。即使您想根据用户的语言格式化日期时间,最好存储用户的文化并通过提供该文化信息在服务器端对其进行格式化。
  • @AaronBertrand:其实你是对的。我确信我已经在上面进行了测试,可能是在 19:04;)所以DateTime.Now.ToString("mm-yyyy") 实际上返回 minute-2012。相应地编辑了我的答案。谢谢。
【解决方案2】:
SELECT RIGHT('0' + CONVERT(VARCHAR(2), MONTH(columnName)), 2)
  + '/' + CONVERT(CHAR(4), YEAR(columnName))
FROM dbo.tableName;

你也可以这样说:

SELECT RIGHT(CONVERT(CHAR(10), columnName, 103), 7)
  FROM dbo.tableName;

在 SQL Server 2012 中,您将能够说:

SELECT FORMAT(columnName, 'MM/yyyy') FROM dbo.table;

【讨论】:

    【解决方案3】:

    你可以在 Gridview 中设置格式,如下所示

    <asp:TemplateField >
         <ItemTemplate>
                 <asp:Label Text='<%# Convert.ToDateTime(DataBinder.Eval(Container.DataItem,  "Created_Date ")).ToString("mm-yyyy")%>'
       ID="lblCreatedDate" runat="server"></asp:Label>
        </ItemTemplate>
     </asp:TemplateField>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多