通过以下查询,我希望能够从提交的表单中获取特定月份/年份的数据。 在表单中,他们可以选择两个月/年,然后用户提交表单。
查询正在运行,但由于我没有日期,问题就出现了,有些月份有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。
答案 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