【问题标题】:SQL date selectingSQL日期选择
【发布时间】:2010-10-12 10:44:44
【问题描述】:

我希望能够选择月份和年份与我正在搜索的内容相同的所有数据库行。由于 DATE 字段有年、月、日,我该如何搜索年月?

【问题讨论】:

  • 我不想这么说,但我同意。他至少领先我5秒。 ;)
  • 我认为是 42...不是我在数:P

标签: sql mysql date


【解决方案1】:

最有效的方法是创建所需范围的开始日期和结束日期,以便将日期作为单个值进行比较,而不是从每个日期中提取年份和月份属性。

例子:

select SomeField
from SomeTable
where SomeDate >= ? and SomeDate < ?

(请注意,第一个比较是包含的,第二个是排除的。)

创建开始日期和结束日期以用作参数:(C# 中的示例)

DateTime start = new DateTime(date.Year, date.Month, 1)
DateTIme end = start.AddMonths(1);

【讨论】:

    【解决方案2】:
    SELECT * 
    FROM tblTableName 
    WHERE Month(ColumnDate) = Month(MyDate) 
        AND Year(ColumnDate) = Year(MyDate)
    

    【讨论】:

      【解决方案3】:

      MySQL中:

      SELECT *
      FROM   mytable
      WHERE  date >= STR_TO_DATE(CONCAT(EXTRACT(YEAR_MONTH FROM @mydate), '01'), '%Y%m%d')
         AND date < STR_TO_DATE(CONCAT(EXTRACT(YEAR_MONTH FROM @mydate), '01'), '%Y%m%d') + INTERVAL 1 MONTH
      

      这将有效地使用date 字段上的索引。

      【讨论】:

      • +1 如此...,嗯...,完整。这是我看到你写的第 n 篇关于 SQL 的帖子,看来你早餐吃 SQL。
      • 谢谢 :) 我以编写 SQL 为生已经快 10 年了 :)
      【解决方案4】:

      这取决于您使用的数据库后端。我会在 SQL Server 中使用

      where year(datefield) = @year and month (datefield) - @month 
      

      这样做。

      或者您可以通过创建日期范围来构建 where 子句

      日期字段在 20090101 和 20090201 之间

      【讨论】:

        【解决方案5】:
        SELECT *
        FROM myTable
        WHERE ( YEAR(myfield) = '2009')
          AND ( MONTH(myfield) = '1')
        

        【讨论】:

          【解决方案6】:

          你会想在mysql中使用MONTH()YEAR()

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-11-17
            • 1970-01-01
            • 1970-01-01
            • 2012-01-01
            • 2014-11-29
            • 2017-12-31
            • 1970-01-01
            相关资源
            最近更新 更多