如何获得仅包含日期和月份的结果?

时间:2016-12-09 23:55:35

标签: sql sql-server

通过以下查询,我希望能够从提交的表单中获取特定月份/年份的数据。 在表单中,他们可以选择两个月/年,然后用户提交表单。

查询正在运行,但由于我没有日期,问题就出现了,有些月份有28/30/31天。

例如,假设date_one = 2016/01和date_two = 2016/10,我会收到错误

Conversion failed when converting date and/or time from character string.

因为我没有变量的日子。 我可以用错误的方法解决这个问题。

如何只选择月份/年份来解决这个问题?

SELECT .......
from test_table
WHERE  paid_dt between  <cfqueryparam  cfsqltype="cf_sql_integer" value="#date_one#">  and
<cfqueryparam  cfsqltype="cf_sql_integer" value="#date_two#"> 
GROUP BY
    DATEPART(year, paid_dt),datename(month,paid_dt),
    datepart(month, paid_dt)
ORDER BY
DATEPART(year, paid_dt) ASC,
datepart(month, paid_dt) ASC

我有sql server 2012。

2 个答案:

答案 0 :(得分:1)

您可以使用try_convert()..例如

Select Try_Convert(Date,'2016/10'+'/01')   -- Notice the addition of /01

返回

2016-10-01

无效的转化将返回null。

获得月末

Select EOMonth(Try_Convert(Date,'2016/2'+'/01'))

返回

2016-02-29

答案 1 :(得分:0)

尝试此查询。

我不知道paid_dt中的数据。 (假设它有日期)

SELECT .......
from test_table
WHERE (YEAR(CONVERT(DATE,paid_dt)) > YEAR(CONVERT(Date,date_one+'/01')) 
        AND
        MONTH(CONVERT(DATE,paid_dt)) > MONTH(CONVERT(Date,date_one+'/01')))
      AND
        (YEAR(CONVERT(DATE,paid_dt)) < YEAR(CONVERT(Date,date_two+'/01')) 
        AND
        MONTH(CONVERT(DATE,paid_dt)) < MONTH(CONVERT(Date,date_two+'/01')))
GROUP BY YEAR(paid_dt), MONTH(paid_dt)
ORDER BY YEAR(paid_dt) ASC, MONTH(paid_dt) ASC