?
Solved

date function - TSQL

Posted on 2009-07-15
6
Medium Priority
?
521 Views
Last Modified: 2012-05-07
Hi,

I have a function that takes the french date for example '20-févr.-09' and converts it to the english equivalent '20-Feb-09'

The function creates successfully but when I execute it as:
 select dbo.FRENCH_DATE('20-févr.-09')

I get the following error:
Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value '20-févr-09-09' to data type int.

I have tried casting the variables but still get the error.

Thank you.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[FRENCH_DATE]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[FRENCH_DATE]
go
CREATE FUNCTION [dbo].[FRENCH_DATE]  (@date VARCHAR(30))
RETURNS INT
AS
/***********************************************************************
Summary:	Converts the french date to english date
	
Examples:	select dbo.FRENCH_DATE('20-févr.-09')
 
***********************************************************************/
 
BEGIN
	DECLARE @day VARCHAR(2)
	DECLARE @month VARCHAR(9)
	DECLARE @year VARCHAR(2)
	DECLARE @RETURNSTRING VARCHAR(30)
 
	SET @RETURNSTRING = ''
 
	-- subtract day from date string
	SET @day = LEFT(CAST(@date AS VARCHAR),2)
 
	-- subtract month from date string
	SET @month = REPLACE(SUBSTRING(CAST(@date AS VARCHAR),4,LEN(CAST(@date AS VARCHAR))-3),'.','')
 
	-- subtract year from date string
	SET @year = RIGHT(CAST(@date AS VARCHAR),2)
 
	IF @month = 'févr' 
		SET @RETURNSTRING = CAST(@day AS VARCHAR) + '-Feb-' + CAST(@year AS VARCHAR)
	ELSE 
		SET @RETURNSTRING = CAST(@day AS VARCHAR) + '-' + CAST(@month AS VARCHAR) + '-' + CAST(@year AS VARCHAR)
	
 
	RETURN @RETURNSTRING
END

Open in new window

0
Comment
Question by:crompnk
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
6 Comments
 
LVL 37

Accepted Solution

by:
momi_sabag earned 1000 total points
ID: 24859491
replace
RETURNS INT

with
RETURNS varchar(14)
0
 
LVL 17

Expert Comment

by:pssandhu
ID: 24859549
Yes, so you are specifying that you are returning a value of INT datatype whereas in your return statement in the end of the fucntion you are returning a varchar value. So as momi_sabaq suggested you have to update your RETURNS satement in the procedure definition.
P
0
 
LVL 31

Expert Comment

by:RiteshShah
ID: 24859602
you  are returning @RETURNSTRING variable which is varchar and you define in function defination that you will return INT value which is mismatch. so change RETURNS to VARCHAR from INT as per said in above comment
0
Stressed Out?

Watch some penguins on the livecam!

 
LVL 31

Expert Comment

by:RiteshShah
ID: 24859610
sorry, I was bit late :)
0
 

Author Comment

by:crompnk
ID: 24897840
Hi,

I have modified the function, please see script below:

It seems to only work for when @month = 'févr' and not any other date, for example the following select gives no month:

select dbo.AFN_FRENCH_DATE('20-décembre-08')

Thank you
CREATE FUNCTION [dbo].[FRENCH_DATE]  (@date VARCHAR(30))
RETURNS varchar(14)
AS
 
 
BEGIN
	DECLARE @day VARCHAR(2)
	DECLARE @month VARCHAR(9)
	DECLARE @year VARCHAR(2)
	DECLARE @RETURNSTRING VARCHAR(30)
 
	SET @RETURNSTRING = ''
 
		SET @day = LEFT(@date,2)
 
		SET @month = SUBSTRING(REPLACE(@date,'.',''),4,LEN(REPLACE(@date,'.',''))-6)
 
	IF @month = 'janvier' SET @month = 'Jan'
	IF @month = 'février' SET @month = 'Feb'
	IF @month = 'mars' SET @month = 'Mar'
	IF @month = 'avril' SET @month = 'Apr'
	IF @month = 'mai' SET @month = 'May'
	IF @month = 'juin' SET @month = 'Jun'
	IF @month = 'juillet' SET @month = 'Jul'
	IF @month = 'août' SET @month = 'Aug'
	IF @month = 'septembre' SET @month = 'Sep'
	IF @month = 'octobre' SET @month = 'Oct'
	IF @month = 'novembre' SET @month = 'Nov'
	IF @month = 'décembre' SET @month = 'Dec'
 
	IF @month = 'févr' SET @month = 'Feb'
 
	ELSE SET @month = ''
 
		SET @year = RIGHT(@date,2)
 
	
	SET @RETURNSTRING = @day + '-' + @month + '-' + @year
 
 
	RETURN @RETURNSTRING
END

Open in new window

0
 
LVL 37

Expert Comment

by:momi_sabag
ID: 24899805
this is your problem:

IF @month = 'févr' SET @month = 'Feb'
 
      ELSE SET @month = ''
 


this if cause it to work only for fevr
0

Featured Post

On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Confronted with some SQL you don't know can be a daunting task. It can be even more daunting if that SQL carries some of the old secret codes used in the Ye Olde query syntax, such as: (+)     as used in Oracle;     *=     =*    as used in Sybase …
Use this article to create a batch file to backup a Microsoft SQL Server database to a Windows folder.  The folder can be on the local hard drive or on a network share.  This batch file will query the SQL server to get the current date & time and wi…
In this video you will find out how to export Office 365 mailboxes using the built in eDiscovery tool. Bear in mind that although this method might be useful in some cases, using PST files as Office 365 backup is troublesome in a long run (more on t…
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question