2012-05-09 5 views
1

소개 : 내가 예를SQL 문, 시간의 특정 범위에서 데이터를 선택

08:30:00 
08:45:00 
09:30:00 
12:20:00 
... 
18:00:00 

이 열의 데이터 유형은 "시간"입니다 위해, 시간과 열이 포함 된 테이블과 데이터베이스를 가지고있다. 질문 : SQL을 사용하여 모든 시간을 선택할 수 있습니까? 10:00:00, 10:30:00, 11:00:00 등] 08:00:00부터 18:00:00까지 목록에없는 항목이 있습니까?

편집 : 글쎄, 그것을 생각한 후 해결책 [감사합니다! ] 완전히 완벽하지는 않습니다. [글쎄, 내가 준 세부 사항으로는 완벽합니다.]]. 내 응용 프로그램은 사용자가 [이 버전의 응용 프로그램에서] 30 분이 소요되는 약속을 할 수있게합니다. 첫 번째 주제에서 시간을 보냈던 칼럼은 11:45:00 또는 13:05:00과 같은 시간대에 표지를 작성하지 않았기 때문에 매우 긍정적이었습니다. 12:15:00과 13에 끝납니다. : 35 : 00, 그래서 나는이 여분의 테이블에 몇 시간을 넣을 수 있을지 처음부터 알지 못합니다.

답변

1

먼저 시간이있는 COL_HR 테이블에 T_REF 테이블을 만들고 원본 테이블에없는 경우보고하십시오. MYSQL에서

이런 일이 얻을 만 시간을 비교 테이블 (ORIG_TABLE)에 있지 을 수있는 사람을보고

SELECT DATE_FORMAT(COLUMN_NAME, '%H') FROM T_REF 
MINUS 
SELECT DATE_FORMAT(COLUMN_NAME, '%H') FROM ORIG_TABLE 

를 작동해야하고.

0

시간당 30 분 정도만 기다리고 계십니까? 어떤 시간을 찾거나 찾지 못할지 모르면 다음을 제안합니다.

가능한 모든 시간을 포함하는 별도의 테이블을 만든 다음 쿼리를 실행하여 해당 시간에없는 시간을 찾습니다. 원본 테이블.

1

미운하지만 가능 : 쿼리에 WHERE t.h IS NULL를 추가 할 것입니다 경우

CREATE TABLE thours (h time); 
INSERT INTO thours VALUES 
    ('08:30:00'), ('08:45:00'), ('09:30:00'), 
    ('12:20:00'), ('18:00:00'); 

CREATE VIEW hrange AS 
SELECT 8 as h UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL 
SELECT 11  UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL 
SELECT 14  UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL 
SELECT 17  UNION ALL SELECT 18; 

CREATE VIEW hours AS 
SELECT cast(concat(cast(h as char), ':00:00') as time) AS h FROM hrange 
UNION ALL 
SELECT cast(concat(cast(h as char), ':30:00') as time) 
    FROM hrange WHERE h < 18 
ORDER BY 1; 

SELECT h.h AS ranged, t.h AS scheduled 
    FROM hours h 
    LEFT join thours t ON h.h = t.h; 

, 당신이 원하는 시간의 목록을 얻을 것이다.

MySQL은 동적으로 시리즈를 생성 할 수 없으므로 뷰를 생성했습니다. Try out here.