【问题标题】:Getting the closest weekday to today in from a matrix (weekdays in ddd format)从矩阵中获取距今天最近的工作日(ddd 格式的工作日)
【发布时间】:2012-09-27 14:59:54
【问题描述】:

当我被问到是否可以为工作中的问题找到一个简单的解决方案时,我有点头疼。

这是目前的情况:

  • 我们有一个日期(主要是今天的日期),我可以使用它轻松获取 Weekday 参数 dEarliest.ToString("ddd");
  • 在数据库中,我们有一个特定任务执行日期的寄存器,工作日存储为“ddd”格式(即周一、周二、周三、周四等)。

还有,问题是,我怎样才能得到数据库记录中最接近今天的哪一天? 我一直坐在这里试图通过一些“智能”SQL 查询来解决这个问题,但我只是不知道如何解决它。

我在想 enum:s,但我不确定这是否可行,如果可行,如何?我对c#很陌生 因此,可能是愚蠢的问题。

任何帮助将不胜感激。 :)

【问题讨论】:

  • 你能提供一个具体的例子吗?你期待吗?向后?两个方向?如果最近的一天是一周前,或者您只查看一周中的几天而不是实际日期,这有关系吗?
  • 您查看的是日期还是日期?如果我错了纠正我。您的数据库有一些任务和相关的 DAY?例如,“会议 #1”-> 星期一,“会议 #2”-> 星期三。并且您想查看 TODAY 并在您的数据库中找到下一个 DAY?
  • 嗨,是的,这都是关于日期,而不是日期。而我只向前看。因此,假设今天是星期一,该活动的下一个有效日期是星期四,我需要得到那一天。 :)

标签: c# datetime dayofweek


【解决方案1】:

最好的方法是在DateTimeDayOfWeek 值(属性DayOfWeek 的类型为enum DayOfWeek)和SQL Server 的DATEPART 函数的输出之间进行比较。

例如,如果您想获取昨天的所有任务,您可以在 C# 中执行此操作:

int yesterday = ((int)(DateTime.Now.DayOfWeek))-1;

然后将该值传递给执行此操作的 SQL 语句:

SELECT * FROM <table> WHERE DATEPART(weekday, <column_name>) = (@yesterday+1)

@yesterday+1 部分是因为 C# 的枚举使用 0-6 表示天数,而 SQL Server 使用 1-7(都使用星期日作为第一个索引)。

【讨论】:

  • 嗨 nateirvin,这不起作用,因为数据库中的日期值存储为 nvarchar(3) 并包含“Mon”、“Tue”、“Wed”等值,在同一dEarliest.ToString("ddd") 将生成的方式。
猜你喜欢
  • 1970-01-01
  • 2012-10-04
  • 2013-06-24
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多