【问题标题】:Add Rowfilter condition for DateTime Year only check为 DateTime Year 添加 Rowfilter 条件仅检查
【发布时间】:2012-02-08 21:34:45
【问题描述】:

我正在尝试使用 DataView.RowFilter 来过滤不属于指定年份的所有条目。我的代码如下:

bigDT.DefaultView.RowFilter = "year(date_posted)=2011";

但是,这不起作用。我读过我可以使用“#mm/dd/yyyy#”之类的格式指定日期时间。

如果我可以只检查年份,我会更喜欢,因为用户可以指定年份,也可以不指定年份、月份或日期等。

谢谢。

【问题讨论】:

    标签: c# asp.net datatable dataview rowfilter


    【解决方案1】:

    对日期时间有效的expressions

    你可以这样做

    "date_posted > #1/1/2011# AND  date_posted <  #12/31/2011#"
    

    【讨论】:

    • 是的,看起来这是唯一的解决方案。谢谢。
    【解决方案2】:

    我并不是说这是一个好方法,但您可以这样做的方法是这样的:

    bigDT.DefaultView.RowFilter = "CONVERT(SUBSTRING(CONVERT(date_posted, 'System.String'), 5, 4), 'System.Int32')=2012";
    

    这会将date_posted 列转换为字符串,提取四位日期,将其转换为整数,然后将其与2012 进行比较以求相等。 CONVERTSUBSTRING 函数记录在 DataColumn.Expression property 中。

    文档没有说,但我想CONVERT(date_posted, 'System.String') 使用您当前文化的短日期模式,所以在我的情况下(en-US),年份是字符偏移量 5-8。 Anurag Ranjhan's answer 肯定会更好,因为它非常冗长,而且它依赖于解析格式化的字符串,但这是另一种方法,它确实有效。

    【讨论】:

      【解决方案3】:

      确保文档的列名称为“年份”,并且该列中的字段是文本或日期时间。如果是日期时间,则需要具体,可能包括日期、时间等。如果是文本,则应为 defaultview.rowfilter = "year = 2011"。

      【讨论】:

      • 列名是date_posted,是一个DateTime对象。有没有办法从 DateTime 对象中提取年份?
      • 我不确定。您只能使用 datetime.tostring() (带有所有格式文本)将日期时间格式化为一年。阅读网络上的日期时间格式。它应该使用格式化来完成。日期时间很棘手,用户需要非常具体。否则像 datetime.year 一样手动过滤它并循环遍历它并自己获取它。
      猜你喜欢
      • 2023-04-09
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      相关资源
      最近更新 更多