Solved

date function - TSQL

Posted on 2009-07-15
6
519 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 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
Turn Insights Into Action

You’ve already invested in ITSM tools, chat applications, automation utilities, and more. Fortify these solutions with intelligent communications so you can drive business processes forward.

With xMatters, you'll never miss a beat.

 
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

SharePoint Admin?

Enable Your Employees To Focus On The Core With Intuitive Onscreen Guidance That is With You At The Moment of Need.

Question has a verified solution.

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

If you have heard of RFC822 date formats, they can be quite a challenge in SQL Server. RFC822 is an Internet standard format for email message headers, including all dates within those headers. The RFC822 protocols are available in detail at:   ht…
This article explains how to reset the password of the sa account on a Microsoft SQL Server.  The steps in this article work in SQL 2005, 2008, 2008 R2, 2012, 2014 and 2016.
Monitoring a network: how to monitor network services and why? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the philosophy behind service monitoring and why a handshake validation is critical in network monitoring. Software utilized …
Add bar graphs to Access queries using Unicode block characters. Graphs appear on every record in the color you want. Give life to numbers. Hopes this gives you ideas on visualizing your data in new ways ~ Create a calculated field in a query: …

691 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