테이블 : 당신은 사용하여이 테이블을 만들 수 있습니다 :CASE 문에서 여러 DATEPART 함수를 사용하는 방법은 무엇입니까?
column_ts column1 FirstName LastName
2016-09-30 00:04:00.000 5 Martha Stuart
2016-09-30 00:24:00.000 51 Tom Riddle
2016-09-30 00:29:00.000 32 Harry Potter
2016-09-30 00:44:00.000 128 Anderson Smith
2016-09-30 00:48:00.000 23 Lisa Young
2016-09-30 01:04:00.000 88 Mad Max
2016-09-30 01:59:00.000 46 Sam King
DDL :
CREATE TABLE TestingTable
(
column_ts datetime,
column1 int,
FirstName varchar(255),
LastName varchar(255)
);
INSERT INTO TestingTable
VALUES ('2016-09-30 00:04:00.000',5,'Martha','Stuart'),
('2016-09-30 00:24:00.000',51,'Tom','Riddle'),
('2016-09-30 00:29:00.000',32,'Harry','Potter'),
('2016-09-30 00:44:00.000',128,'Anderson','Smith'),
('2016-09-30 00:48:00.000',23,'Lisa','Young'),
('2016-09-30 01:04:00.000',88,'Mad','Max'),
('2016-09-30 01:04:00.000',46,'Sam','King');
I를 나는 SQL 서버 2012에서 데이터베이스 테이블 TestingTable을이 테이블이 어떻게 보이는지되어 있습니다 column_ts가 26-30 또는 56-00 사이의 분 값을 갖는 경우에만 column1을 선택하는 쿼리가 있어야합니다.
select ISNULL(column1,0) from TestingTable
where ((DATEPART(n, column_ts) > 25) AND DATEPART(n, column_ts) <= 30)
OR (((DATEPART(n, column_ts) > 55) AND DATEPART(n, column_ts) <= 59) OR DATEPART(n, column_ts) = 0);
결과는 다음과 같습니다
(No column name)
32
46
내 목표 :가 지금은 하위 쿼리로 위의 쿼리를 사용하고 싶습니다. FirstName (고유 한 값을 가짐)이 주어지면 해당 이름을 가진 행을 선택하고 column_ts가 26-30 또는 56-00 사이의 분 값을 갖는 경우에만 column1의 값을 선택하십시오. 그렇지 않으면 column1을 0으로 선택하십시오.
내가 시도한 것 : 나는 CASE를 사용해야 할 것 같지만 CASE에서는 괄호를 사용할 수 없다는 것을 알았습니다. 나는 그것을 위해 점점 구문 오류하지만 뭔가를 시도 :
select column_ts, column1 =
CASE column_ts
WHEN (((DATEPART(n, column_ts) > 25) AND DATEPART(n, column_ts) <= 30)
OR (((DATEPART(n, column_ts) > 55) AND DATEPART(n, column_ts) <= 59) OR DATEPART(n, column_ts) = 0)) THEN column_ts
ELSE 0
END, FirstName, LastName
from TestingTable
where FirstName = 'Tom';
오류 :
이Msg 102, Level 15, State 1, Line 3
Incorrect syntax near '>'.
Msg 102, Level 15, State 1, Line 4
Incorrect syntax near 'DATEPART'.
나는 위의 쿼리를 수정하거나 달성하기 위해 또 다른 쿼리를 작성하는 방법을 나에게 제시하십시오 : 쿼리 위 구문 오류가 있습니다 내 목표.
'case' 다음에'colum_ts'를 제거하십시오. 'when'가'datetime'을 반환하기 때문에'else' 부분을'datetime'으로'cast '합니다. –