如何在sql server中搜索月份和年份

时间:2018-01-31 12:28:23

标签: sql sql-server tsql

我想将MySQL查询转换为T-SQL,我需要日期格式功能, 这是我在MySQL中的查询:

SELECT t.id, t.value, t.branch_id, k.name 
FROM tb_target as t 
LEFT JOIN tb_keyindicator as k ON k.id = t.keyindicator_id 
WHERE t.branch_id IN ('241') 
AND DATE_FORMAT(t.period,"%Y-%m") = '2017-09'

我收到错误,'DATE_FORMAT' is not a recognized built-in function name,任何人都可以帮我解决此问题。

4 个答案:

答案 0 :(得分:4)

在两个数据库中,最好使用显式日期比较来编写它:

SELECT t.id, t.value, t.branch_id, k.name 
FROM tb_target t LEFT JOIN
     tb_keyindicator k
     ON k.id = t.keyindicator_id 
WHERE t.branch_id IN ('241') AND
      t.period >= '2017-09-01' AND
      t.period < '2017-10-01';

请注意,如果branch_id是一个数字,那么您应该删除单引号以进行比较。

通过使用直接日期比较,SQL引擎可以利用列上的适当索引。

答案 1 :(得分:1)

如果您愿意,可以将日期转换为yyyy-mm格式,

SELECT t.id, t.value, t.branch_id, k.name 
FROM tb_target as t 
LEFT JOIN tb_keyindicator as k ON k.id = t.keyindicator_id 
WHERE t.branch_id IN ('241') 
AND CONVERT(char(7), t.period, 121) = '2017-09'

答案 2 :(得分:0)

如果您想按月过滤:

SELECT t.id, 
       t.value, 
       t.branch_id, 
       k.name 
FROM tb_target t LEFT JOIN
tb_keyindicator k ON k.id = t.keyindicator_id 
WHERE t.branch_id IN ('241') AND
      datepart(month, t.period) = 9

答案 3 :(得分:-1)

SELECT t.id, t.value, t.branch_id, k.name 
FROM tb_target as t 
LEFT JOIN tb_keyindicator as k ON k.id = t.keyindicator_id 
WHERE t.branch_id IN ('241') 
AND LEFT(CONVERT(varchar, t.period,112),6) = '2017-09'