如何解决这个查询

时间:2019-11-19 00:09:07

标签: sql sql-server

Q:练习:2(qwrqwr:2013-05-03)对于Battles表中存在的每个月(与年份有关),找出一周中每一天的发生次数。输出:月份(“ YYYY-MM”格式),星期一,星期二,...星期日的数量。

这是我的代码:

SELECT NAME, REPLACE(STR(YEAR(DATE),4), '', '0') + '-' + 
REPLACE(STR(MONTH(DATE),2), '' , '0') + '-01',
REPLACE(STR(YEAR(DATEADD(DAY, -1, (DATEADD(MONTH, 1, 
REPLACE(STR(YEAR(DATE),4), '', '0') + '-' +
REPLACE(STR(MONTH(DATE), 2), '', '0') + '-01')))), 4), '', '', '0')
+ '-' + REPLACE(STR(MONTH(DATEADD(DAY, -1, (DATEADD(MONTH, 1, 
REPLACE(STR(YEAR(DATE),4), '', '0') + '-' +
REPLACE(STR(MONTH(DATE), 2), '', '0') + '-01')))), 2), '', '0') +
+ '-' + REPLACE(STR(DAY(DATEADD(DAY, -1, (DATEADD(MONTH, 1, 
REPLACE(STR(YEAR(DATE), 4), '', '0') + '-' +
REPLACE(STR(MONTH(DATE), 2), '', '0') + '-01)))), 2), '', '0')
FROM BATTLES

================= 结果:不正确 错误。 replace函数需要3个参数。

1 个答案:

答案 0 :(得分:0)

您的第二个parameter功能上还有其他replace

SELECT
       NAME
     , REPLACE(STR(YEAR(DATE),4), '', '0') + '-' + REPLACE(STR(MONTH(DATE),2), '' , '0') + '-01'
     , REPLACE(STR(YEAR(DATEADD(DAY, -1, (DATEADD(MONTH, 1 , REPLACE(STR(YEAR(DATE),4), '', '0') + '-' + REPLACE(STR(MONTH(DATE), 2), '', '0') + '-01')))), 4), '', '0') + '-' + REPLACE(STR(MONTH(DATEADD(DAY, -1 , (DATEADD(MONTH, 1, REPLACE(STR(YEAR(DATE),4), '', '0') + '-' + REPLACE(STR(MONTH(DATE), 2), '', '0') + '-01')))), 2), '', '0') + '-' + REPLACE(STR(DAY(DATEADD(DAY, -1, (DATEADD(MONTH, 1, REPLACE(STR(YEAR(DATE), 4), '', '0') + '-' + REPLACE(STR(MONTH(DATE), 2), '', '0') + '-01')))), 2), '', '0')

这是罪魁祸首。

 REPLACE(STR(MONTH(DATE), 2), '', '0') + '-01')))), 4), '', '', '0')