【问题标题】:Select data between 2 Date in sql and linq在sql和linq中的2个日期之间选择数据
【发布时间】:2017-06-02 10:22:21
【问题描述】:

您好,我需要在两个日期之间选择一些数据,我可以使用这样的 sql 查询轻松完成此操作:
SELECT * FROM tbl_Check WHERE StudentId = 9 AND CheckDate >= 2010 AND CheckDate <= 2017


注意:Sql表中的CheckDate类型为:NVARCHAR(12)

现在我想在 linq 中使用这个查询,我写了这个,但是我得到错误操作符 >= 不能应用于字符串和字符串类型的操作数。

from val in dc.CheckVs
            where val.StudentId == 9 &&
                  val.CheckDate >= txtDate1.Text &&
                  val.CheckDate <= txtDate2.Text
                  select val;


【问题讨论】:

  • 除非您有充分的理由这样做,否则您不应将日期存储为字符串。

标签: sql sql-server linq linq-to-sql sql-query-store


【解决方案1】:

如果你的字段是NVARCHAR(12),但值只有YEAR,你可以转换INT中的列。

试试看。

from val in dc.CheckVs
where val.StudentId == 9 &&
      Convert.ToInt32(val.CheckDate.Tostring()) >= Convert.ToInt32(txtDate1.Text) &&
      Convert.ToInt32(val.CheckDate.Tostring()) <= Convert.ToInt32(txtDate2.Text)
select val;

我等待这个帮助你;)

【讨论】:

    【解决方案2】:

    您可能需要转换为日期并使用 year() 函数来检查,如下所示:

    SELECT * FROM  tbl_Check
      WHERE StudentId = 9
      AND year(convert(date,CheckDate)) >= 2010
      AND year(convert(date,CheckDate)) <= 2017
    

    【讨论】:

    • 这个日期怎么样? 2017/12/18 我现在使用了你的代码,它给我的错误是时间必须是 yyyy/MM/dd hh:mm:ss ,但我的日期没有时间。
    • SqlDateTime 溢出。必须在 1753 年 1 月 1 日上午 12:00:00 到 9999 年 12 月 31 日晚上 11:59:59 之间。'
    【解决方案3】:

    你也可以这样做

    SELECT * FROM  tbl_Check
      WHERE StudentId = 9
      AND (YEAR(CheckDate) BETWEEN 2010 AND 2017)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多