2015-01-08 4 views
0

하나의 테이블에 3 개의 열이 있습니다. @ Month, @ Year 및 @column_Name과 같은 세 개의 매개 변수를 사용하여 저장 프로 시저를 만들고 아래의 결과를 얻으려고합니다. 현재 값을 합하고 싶습니다. column1과 column2, 즉 HH에있는 데이터 : mm : ss 형식의 문자열은 분으로 나타납니다 [예 : '01 : 00 : 00 '결과는 where 절의 매개 변수와 함께 나타납니다.where 절의 열 이름이있는 저장 프로 시저

참고 : Column1Column2의 데이터 유형은 varchar이고 데이터는 hh:mm:ss 형식입니다. 저장 프로 시저의 표에서

샘플 날짜

Date_Col      Column1  Column2 

2014-12-17 10:00:00.000  01:10:00  00:15:00 
2014-12-18 11:12:00.000  02:22:00  00:52:00 
2015-01-15 09:32:00.000  00:34:00  01:09:00 
2015-01-16 11:43:00.000  10:00:00  02:00:00 

결과

@Month = 12 ,@Year = 2014,@Column_Name = Column1 

는 아래

Date_Col        Column1 
--------------------------------------------------------------------  
2014-12-17       70 [01:10:00 = 60 + 10 min] 
2014-12-18       142 

내가

를 참조하고있는 SP입니다 10

는하지만 오류를 반환 :

Msg 241, Level 16, State 1, Procedure Test_SP, Line 8
Conversion failed when converting date and/or time from character string.

+0

[걷어차 나쁜 습관 : 잘못된 데이터 유형 선택] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-를 to-kick-using-the-wrong-data-type.aspx) - 항상 가장 적합한 데이터 유형을 사용해야합니다. 당신이 날짜를 가지고 있다면 - ** 적절한 데이터 타입 - ** DATE' 또는'DATETIME2 (3)'또는 **에 그들을 ** 저장할 것입니다 ** 그러나 그것들을 ** VARCHAR로 저장하지 마십시오! 당신은 단지 문제를 묻는 중입니다 ... –

+0

Ok 그리고 select 쿼리에서 매개 변수를 전달하는 것은 무엇입니까 – Parth

+0

'Date'로 변환 (date, date_col)은 this f9 – Parth

답변

0

이 시간의 부분을 얻기 위해 문자열 함수 함께 엉망를 수행 제발 도와주세요. 이것이 가능한 최악의 방법입니다. 대신, SQL Server Time 형식으로 변환하고 날짜 및 시간 함수를 사용하십시오. 이 코드에서 두 건의 SELECT 나를 위해 70 제작 :

declare @test varchar(8); set @test = '01:10:00' 

declare @t1 time;set @t1 = CAST(@test as time); 
declare @t2 time;set @t2 = '00:00:00'; 

select DATEDIFF(minute, @t2, @t1) 
select DATEPART(hour, @t1) * 60 + DATEPART(minute, @t1) 

DATEPART() 기능 호환되는 유형으로 @Test 값을 변환 거기에서 암시 적 캐스트가있다. 이 경우 분의 값을 얻을 때 훨씬 더 많은 데이터가이되며, 처음에는 TIME 유형을 사용하여 데이터를 저장하면 상황이 나아질 것입니다.

열 이름 부분의 경우 CASE 문을 사용해야합니다. 전체 코드는 다음과 같이 표시됩니다

SELECT Date_Col, 
    DATEDIFF(minute, '00:00:00', 
     CASE @ColumnName WHEN 'Column1' THEN Column1 
         WHEN 'Column2' THEN Column2 
         ELSE NULL END) As Minutes 
FROM Test_Table 
WHERE YEAR(Date_Col) = @Year AND MONT(Date_Col) = @Month 
+0

이며 where 절에서 매개 변수 sir을 전달할 곳은 – Parth

+0

입니다. 년/월 매개 변수를 포함합니다. 이 해와 함께 where 절에 열이 필요하지 않습니다. 당신은 여전히 ​​올바른 결과를 얻을 수 있습니다. –

+0

그 결과로 아무 것도 나타나지 않습니다. ColumnName, Month 및 year로 varchar (50), INT, INT를 선언했습니다. – Parth