2017-10-27 1 views
1

안녕하세요! 날짜 시간 데이터 형식으로 채워진 표가 nvarchar로 저장되어 있습니다. 표에서 선택하고 결과를 일별로 정렬해야합니다. 요일이이 모양으로 삽입됩니다.주문일 SQL 선택

>Thursday 11:30-12:30 
>Sunday 08:00-09:00 
>Sunday 08:00-09:00 
>Sunday 08:00-09:00 
>Sunday 08:00-09:00 
>Monday 08:00-09:00 
>Monday 09:00-10:00 
>Monday 08:00-09:00 

제가 사용 시도이

SELECT TOP 1000 [Class_Time_ID] ,[Class_ID] ,[Class_Date] 
FROM [School].[dbo].[Class_Time_Table] 
ORDER BY CASE Class_Date WHEN 'Monday' THEN 2 
         WHEN 'Tuesday' THEN 3 
         WHEN 'Wednesday' THEN 4 
         WHEN 'Thursday' THEN 5 
         WHEN 'Sunday' THEN 1 
     end 
+0

테이블 스키마 란 무엇입니까? 지금까지 뭐 해봤 어? 이 문제를 스스로 풀려고 노력한 적이 있습니까? – Jacobm001

+0

나는이 SELECT의 TOP 1000 Class_Time_ID] [CLASS_ID] [Class_Date] FROM [학교]. [dbo가]. [Class_Time_Table] ORDER CASE Class_Date BY '월요일'THEN 2 를 사용하여 시도 언제 '화요일'THEN 3 언제 '수요일'그때 4 언제 '목요일'그때 5 언제 일요일 그때 1 끝 –

+0

당신이 대답을 얻고 싶으면 질문하는 방법을 배우십시오. 또한, 지금까지 시도한 것은 무엇입니까? https://stackoverflow.com/help/how-to-ask – Eric

답변

1

될 수 CROSS APPLY 사용 도움이되면에 대한 별칭 사용이 허용됩니다. selectwhere 절 모두에서 10입니다. 예 :

SQL Fiddle

MS SQL 서버 2014 스키마 설정 : 1

CREATE TABLE Class_Time_Table 
    ([Class_Date] varchar(20), [Class_Time_ID] int ,[Class_ID] int) 
; 

INSERT INTO Class_Time_Table 
    ([Class_Date]) 
VALUES 
    ('Thursday 11:30-12:30'), 
    ('Sunday 08:00-09:00'), 
    ('Sunday 08:00-09:00'), 
    ('Sunday 08:00-09:00'), 
    ('Sunday 08:00-09:00'), 
    ('Monday 08:00-09:00'), 
    ('Monday 09:00-10:00'), 
    ('Monday 08:00-09:00') 
; 

검색어 :

SELECT 
     ctt.* 
     , ca.day_of_week,ca.start_time,ca.end_time 
FROM Class_Time_Table ctt 
CROSS APPLY (
     SELECT 
      CASE 
        WHEN class_date LIKE 'Monday%' THEN 2 
        WHEN class_date LIKE 'Tuesday%' THEN 3 
        WHEN class_date LIKE 'Wednesday%' THEN 4 
        WHEN class_date LIKE 'Thursday%' THEN 5 
        WHEN class_date LIKE 'Sunday%' THEN 1 
      END         AS day_of_week 
      , SUBSTRING(RIGHT(class_date, 11), 1, 5) AS start_time 
      , SUBSTRING(RIGHT(class_date, 5) , 1, 5) AS end_time 
) ca 
order by day_of_week, start_time, end_time 

Results :

|   Class_Date | Class_Time_ID | Class_ID | day_of_week | start_time | end_time | 
|----------------------|---------------|----------|-------------|------------|----------| 
| Sunday 08:00-09:00 |  (null) | (null) |   1 |  08:00 | 09:00 | 
| Sunday 08:00-09:00 |  (null) | (null) |   1 |  08:00 | 09:00 | 
| Sunday 08:00-09:00 |  (null) | (null) |   1 |  08:00 | 09:00 | 
| Sunday 08:00-09:00 |  (null) | (null) |   1 |  08:00 | 09:00 | 
| Monday 08:00-09:00 |  (null) | (null) |   2 |  08:00 | 09:00 | 
| Monday 08:00-09:00 |  (null) | (null) |   2 |  08:00 | 09:00 | 
| Monday 09:00-10:00 |  (null) | (null) |   2 |  09:00 | 10:00 | 
| Thursday 11:30-12:30 |  (null) | (null) |   5 |  11:30 | 12:30 | 
0

결코하지 않는다 동일'Monday'하지만 'Monday%'처럼이다 Class_Date (예 'Monday 09:00-10:00' 같이)

SELECT 
    class_time_id, 
    class_id, 
    class_date 
FROM school.dbo.class_time_table 
ORDER BY CASE 
    WHEN class_date LIKE 'Monday%' THEN 2 
    WHEN class_date LIKE 'Tuesday%' THEN 3 
    WHEN class_date LIKE 'Wednesday%' THEN 4 
    WHEN class_date LIKE 'Thursday%' THEN 5 
    WHEN class_date LIKE 'Sunday%' THEN 1 
END