[SQL] 검사 시간은 두 번 (시간 데이터 형식) 사이 인 경우
SQL검사 시간은 두 번 (시간 데이터 형식) 사이 인 경우
나는 날짜로 "만든"열이있는 테이블이있다.
내가 만든 값에 대한 시간이 두 번 사이에 있는지 확인하는 쿼리에 노력하고있어.
(자정)와 나는 오후 11 오전 7시 사이의 시간과 항목에 대한 쿼리에 노력하고있어 첫 번째 행의 생성 날짜는 ': 00 : 00.000 2013년 7월 1일 00'입니다.
select *
from MyTable
where CAST(Created as time) between '23:00:00' and '06:59:59'
그러나 결과가 반환되지 않습니다.
내가 날짜 시간 내 시간을 변환해야합니까?
해결법
-
==============================
1.난 당신이 오후 11 시이 후에 또는 오전 7시 전에하다고 확인하려면 의심 :
난 당신이 오후 11 시이 후에 또는 오전 7시 전에하다고 확인하려면 의심 :
select * from MyTable where CAST(Created as time) >= '23:00:00' or CAST(Created as time) < '07:00:00'
-
==============================
2.
select * from MyTable where CAST(Created as time) not between '07:00' and '22:59:59 997'
-
==============================
3.나는 매우 비슷한 문제를 가지고 내 솔루션을 공유 할
나는 매우 비슷한 문제를 가지고 내 솔루션을 공유 할
이 테이블 (모든 MySQL은 5.6)을 감안할 때 :
create table DailySchedule ( id int auto_increment primary key, start_time time not null, stop_time time not null );
시작 시간과 종료 시간 사이에 주어진 시간 × (: mm SS hh는) 모든 행을 선택합니다. 다음날 포함.
참고 : (NOW 교체)가 어떤 시간처럼 당신을 X
SELECT id FROM DailySchedule WHERE (start_time < stop_time AND NOW() BETWEEN start_time AND stop_time) OR (stop_time < start_time AND NOW() < start_time AND NOW() < stop_time) OR (stop_time < start_time AND NOW() > start_time)
결과
주어진
id: 1, start_time: 10:00:00, stop_time: 15:00:00 id: 2, start_time: 22:00:00, stop_time: 12:00:00
-
==============================
4.이것은 또한 (심지어 SQL-Server 2005에서) 작동합니다 :
이것은 또한 (심지어 SQL-Server 2005에서) 작동합니다 :
SELECT * FROM dbo.MyTable WHERE Created >= DATEADD(hh,23,DATEADD(day, DATEDIFF(day, 0, Created - 1), 0)) AND Created < DATEADD(hh,7,DATEADD(day, DATEDIFF(day, 0, Created), 0))
데모
-
==============================
5.
WITH CTE as ( SELECT CAST(ShiftStart AS DATETIME) AS ShiftStart, CASE WHEN ShiftStart > ShiftEnd THEN CAST(ShiftEnd AS DATETIME) +1 ELSE CAST(ShiftEnd AS DATETIME) END AS ShiftEnd FROM **TABLE_NAME** ) SELECT * FROM CTE WHERE CAST('11:00:00' AS DATETIME) BETWEEN ShiftStart AND ShiftEnd -- Start of Shift OR CAST('23:00:00' AS DATETIME) BETWEEN ShiftStart AND ShiftEnd -- End of Shift
-
==============================
6.우리가 변화 정보를 저장하는 테이블을 생각해 보자
우리가 변화 정보를 저장하는 테이블을 생각해 보자
테이블을 생성하는 SQL 쿼리를 확인하고 입력 (시간)을 기준으로 일정을 찾아주십시오
표 변수 선언
declare @MyShiftTable table(MyShift int,StartTime time,EndTime time)
테이블 변수에 값을 추가
insert into @MyShiftTable select 1,'01:17:40.3530000','02:17:40.3530000' insert into @MyShiftTable select 2,'09:17:40.3530000','03:17:40.3530000' insert into @MyShiftTable select 3,'10:17:40.3530000','18:17:40.3530000'
"신고"라는 추가 필드와 다른 테이블 변수 만들기
declare @Temp table(MyShift int,StartTime time,EndTime time,Flag int)
시작 시간과 종료 시간을 교환과 임시 테이블에 값을 추가
MyShift, 케이스 (상영> 종료 시각)을 종료 시각 다른 상영 단, 케이스 (상영> 종료 시각)을 상영 다른 ENDTIME 단, 경우 선택 @Temp 삽입 (상영> 종료 시각)로부터 @MyShiftTable 후 1 0 다른 단부
입력 변수를 작성하면 Shift 키를 찾을 수
declare @time time=convert(time,'10:12:40.3530000')
쿼리가 제공되는 시간에 해당하는 변화를 찾을 수
@Temp의 경우 (@time 상영 시간과 종료 시각 사이 myShift을 선택 플래그 = 0) 또는 (@time 생략) 상영 시간 및 종료 시각과 플래그 = 1 사이
-
==============================
7.하고 대신 OR해야
하고 대신 OR해야
select * from MyTable where CAST(Created as time) >= '23:00:00' AND CAST(Created as time) < '07:00:00'
from https://stackoverflow.com/questions/17407481/check-if-a-time-is-between-two-times-time-datatype by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL Server의 테이블 TABLENAME을 만들보기 (0) | 2020.07.10 |
---|---|
[SQL] ExecuteScalar는 (); SCOPE_IDENTITY ()로 생성 "System.InvalidCastException : 지정한 캐스트가 잘못되었습니다"[중복] (0) | 2020.07.10 |
[SQL] SQL에서 날짜별로 필터 (0) | 2020.07.10 |
[SQL] 오라클 IN 절에서 LIKE를 사용하여 (0) | 2020.07.10 |
[SQL] 백업 SQL 스키마 만? (0) | 2020.07.10 |