Solved

date function - TSQL

Posted on 2009-07-15
6
516 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
6 Comments
 
LVL 37

Accepted Solution

by:
momi_sabag earned 250 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
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 
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

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

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

Introduction: When running hybrid database environments, you often need to query some data from a remote db of any type, while being connected to your MS SQL Server database. Problems start when you try to combine that with some "user input" pass…
In this article I will describe the Backup & Restore method as one possible migration process and I will add the extra tasks needed for an upgrade when and where is applied so it will cover all.
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, just open a new email message. In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…

813 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

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now