【问题标题】:Select Where Month= X and Year= Y [closed]选择月= X和年= Y [关闭]
【发布时间】:2013-05-05 04:13:43
【问题描述】:

我有以下选择:

SELECT * FROM Table
WHERE Column= datepart(month,'2013-05-07 10:18:00') 
  AND Column= datepart(year,'2013-05-07 10:18:00')

我希望它显示月份 = 05 和年份 = 2013 的位置。实际上它没有显示任何内容(但有结果要显示)。谢谢。

【问题讨论】:

  • 您将月份和年份都与Column 进行比较。您确定您在实际的 WHERE 子句中没有使用同一列吗?
  • 为什么人们投反对票?我没有说我的代码是正确的。我只是把我正在做的事情和寻求帮助!
  • 发帖前先阅读文档怎么样?
  • stackoverflow.com/faq 在“我可以在这里问什么样的问题?”在提出问题之前没有要求我阅读文档。保持冷静,伙计。
  • 一切都很酷。但是,在此处发布之前简单阅读文档会指导您走上正确的道路。很高兴您找到了答案。

标签: sql tsql datepart


【解决方案1】:

我会使用 MONTH 和 YEAR 函数

SELECT * FROM Table
WHERE MONTH(yourColumn) = 5  and YEAR(yourColumn) = 2013

http://msdn.microsoft.com/en-us/library/ms186313.aspx

http://msdn.microsoft.com/en-us/library/ms187813.aspx

【讨论】:

  • 肯定用这个,比我的回答好。干得好,你等了 3 分钟 :-)
  • @TheWaxMann 不,实际上它们之间根本没有区别。这被翻译为使用datepart。如果您查看查询计划的 xml 版本,您可以看到这一点。老实说。它们同样糟糕,并且总是必须扫描表中的所有行以找出要返回的行。这不可能使用索引。
【解决方案2】:
SELECT * 
  FROM Table
 WHERE datepart(month, datecolumn) = 5
   AND datepart(year, datecolumn) = 2013

【讨论】:

  • 不客气。不要忘记将问题标记为已回答:-)
  • 是的,所以让我等几分钟……还有 3 分钟……
【解决方案3】:

在列上应用函数通常是个坏主意。它使条件non-sargable

最好按间隔进行测试。

SELECT * 
FROM YourTable
WHERE DateCol >= '20130501' AND
      DateCol < '20130601'

A SQL Fiddle to play around with that proves my point

【讨论】:

    【解决方案4】:

    试试

    SELECT * FROM Table WHERE month = DATE_FORMAT('2013-05-07 10:18:00', '%m') AND ...
    

    【讨论】:

    • 你的答案在 MySQL; OP 正在使用 t-sql。
    【解决方案5】:

    我想您的专栏本身就是 DATE? 然后你需要在"="

    的两边应用DATEPART
    SELECT
            *
        FROM Table
        WHERE
            DATEPART(MONTH, Column)= DATEPART(MONTH,'2013-05-07 10:18:00') 
            AND DATEPART(YEAR, Column) = DATEPART(YEAR,'2013-05-07 10:18:00')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-19
      • 2021-05-13
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多