2014-02-10 5 views
0

SQL 서버에서 고유 번호를 생성하는 다음 함수가 있습니다. 내가 수식에서 호출 할 때SQL 함수에서 연도를 얻는 방법

USE [icelandtaxitours_development] 
GO 
/****** Object: UserDefinedFunction [dbo].[ufnInvoiceNumber] Script Date: 10.2.2014 22:53:54 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER FUNCTION [dbo].[ufnInvoiceNumber](
    @Value int 
) 
RETURNS varchar(6) 
WITH SCHEMABINDING 
AS 
BEGIN 
    DECLARE @ReturnValue varchar(8); 

    SET @ReturnValue = CONVERT(varchar(8), @Value); 
    SET @ReturnValue = Year(Getdate()) + '-' + REPLICATE('0', 8 - DATALENGTH(@ReturnValue)) + @ReturnValue; 

    RETURN (@ReturnValue); 
END; 

그리고 난 다음을 수행하십시오

(isnull([dbo].[ufnInvoiceNumber]([InvoiceID]),'')) 

... 지금은 단순히 숫자 "2015".. 제가 원하는 것은 숫자 "2014-00000001"입니다 얻을 인보이스 번호로

어떻게해야합니까?

+0

:

사실 나는 등 몸을 쓰는 것을 선호? 이 코드 부분에 형식 오류가 발생하지 않습니다. 'Year (Getdate()) +'-''? –

+0

최대 6 자까지만 반환합니다. – Zec

답변

1

숫자 추가 또는 문자열 연결을 원하든 서버가 혼란 스러울 수 있습니다.

SET @ReturnValue = CONVERT(CHAR(4),Year(Getdate())) 
        + '-' 
        + REPLICATE('0', 8 - DATALENGTH(@ReturnValue)) + @ReturnValue; 

플러스 당신은 당신의 반환 형식의 길이를 늘려야 : 안전을 위해 당신은 문자열로 올해 캐스트 할 수

RETURNS varchar(13) 
+0

안녕 올해는 ....하지만 나머지는 없습니다./ 내 청구서 번호는 (변경 후) 2014-0 때 2014-000000001이되어야합니다. –

+0

반환 유형에 대한 메모를 참조하십시오. 단 6 자만 반환합니다. –

+0

위대한 작품 :) 정말 고마워. –

0

난 당신이 원하는 기능을 생각 :

ALTER FUNCTION [dbo].[ufnInvoiceNumber](
    @Value int 
) 
RETURNS varchar(255) 
WITH SCHEMABINDING 
AS 
BEGIN 
    DECLARE @ReturnValue varchar(255); 

    SET @ReturnValue = CONVERT(varchar(8), @Value); 
    SET @ReturnValue = cast(Year(Getdate()) as varchar(255)) + '-' + REPLICATE('0', 8 - LEN(@ReturnValue)) + @ReturnValue; 

    RETURN (@ReturnValue); 
END; 

가장 중요한 부분은 반환 값 유형을 varchar()으로 변경하여 원하는 값을 유지하고 해당 유형을 @ReturnValue (으)로 변경할 수 있습니다. 전자 코드. 또한 데이터 오류를 피하기 위해 명시 적 형변환을 추가했으며 간단한 문자열로 작업 중이므로 datalength()len()으로 바꿉니다. 이 실제로 작동

SET @ReturnValue = (cast(Year(Getdate() as varchar(255)) + '-' + 
         LEFT(REPLICATE('0', 8) + cast(@value as varchar(8)), 8 
         );  
    RETURN (@ReturnValue); 
+0

getdate() 근처에서 닫는 괄호가 올바르게 수정되었습니다. –

관련 문제