Link to home
Start Free TrialLog in
Avatar of al4629740
al4629740Flag for United States of America

asked on

convert string to date format

Here is my query to get a list of all groups for all months.  I have also attached the output in a file.  As you can see from the data results, the Month column presents a challenge.  I would like to find all records between the months of December to February. How could I do so in SQL?  I imagine that I will have to convert the Month column to a date type somehow.

select P.Agency, M.Month, F.Description,F.GrossAmount,F.NetAmount,F.InKindAmount from tblOrgProfile P 
Join tblorgMonthlyReport M on M.AgencyID = P.AgencyID
Join tblOrgMonthlyFunds F on F.MonthlyID = M.MonthlyID
Where Agency <> 'Administrator'
order by Agency

Open in new window

output.xlsx
Avatar of HainKurt
HainKurt
Flag of Canada image

maybe this:

DATEPART(month, some_Date) in (12,1,2)
Avatar of Scott Pletcher
Honestly, I think it'd be more effort to force it to a date format than to just process it as is:

WHERE
    [Month] LIKE '%Dec%' OR
    [Month] LIKE '%Jan%' OR
    [Month] LIKE '%Feb%'
what values do you have? string like 'December', 'January', February'? Then:

month in ('December', 'January', February')
Avatar of al4629740

ASKER

The problem is that from a vb6 form I am having a user choose from a date range and then I would retrieve it in SQL.

I would like to specify a date range which means the code would need to be more scalable for such a purpose.

Any other ideas?
The value would be a beginning month and an ending month.

For example

December to February
what are you passing to query, and what values do you have in your table?
I would be passing only two variables: December, February

The attached file shows what I have in my table related to months.
Those are the typical variables
... where
DATEPART (month, M.Month) between GetMonth(@param1)+12 and GetMonth(@param2)+12

where GetMonth is a function like

create function GetMonth(@s varchar) returns int32 as 
begin
	return (case @s 
		when 'January' then 1
		...
		when 'December' then 12
	end
	);
end;

Open in new window

^^ is almost correct, I will find a way to check interval...
ASKER CERTIFIED SOLUTION
Avatar of HainKurt
HainKurt
Flag of Canada image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
I think the parenthesis are off.  I corrected here:

select P.Agency, M.Month, F.Description,F.GrossAmount,F.NetAmount,F.InKindAmount from tblOrgProfile P 
Join tblorgMonthlyReport M on M.AgencyID = P.AgencyID
Join tblOrgMonthlyFunds F on F.MonthlyID = M.MonthlyID
Where Agency <> 'Administrator' And
((DATEPART (month, M.Month) >= 7) and (DATEPART (month, M.Month) <= 12)) or
((DATEPART (month, M.Month) <= 7) and (DATEPART (month, M.Month) > 12))
order by Agency

Open in new window


The problem is that I get an error:

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.
Nevermind, I think I found the problem