Microsoft SQL Server에서 날짜만 사용하여 DATETIME 필드를 쿼리하는 방법
TEST 테이블이 있습니다.DATETIME다음과 같은 필드:
ID NAME DATE
1 TESTING 2014-03-19 20:05:20.000
이 행과 2014년 3월 19일 날짜의 모든 행을 반환하는 쿼리가 필요합니다.나는 그것을 사용해봤어요.
select * from test where date = '03/19/2014';
그러나 행은 반환되지 않습니다.제가 찾은 유일한 방법은 날짜의 시간 부분을 제공하는 것입니다.
select * from test where date = '03/19/2014 20:03:02.000';
범위 또는 DateDiff 함수 사용
select * from test
where date between '03/19/2014' and '03/19/2014 23:59:59'
또는
select * from test
where datediff(day, date, '03/19/2014') = 0
기타 옵션은 다음과 같습니다.
데이터베이스 스키마를 제어할 수 있고 시간 데이터가 필요하지 않은 경우 해당 스키마를 제거합니다.
또는 날짜 값의 시간 부분이 제거된 계산된 열 속성을 추가합니다.
Alter table Test Add DateOnly As DateAdd(day, datediff(day, 0, date), 0)
또는 SQL Server의 최신 버전에서는...
Alter table Test Add DateOnly As Cast(DateAdd(day, datediff(day, 0, date), 0) as Date)
그런 다음 다음과 같이 간단하게 쿼리를 작성할 수 있습니다.
select * from test
where DateOnly = '03/19/2014'
간단한 답변
select * from test where cast ([date] as date) = '03/19/2014';
MySQL 5.6을 사용하고 있는데 날짜 시간에서 날짜 부분만 추출하는 DATE 기능이 있습니다.이 질문에 대한 간단한 해결책은 다음과 같습니다.
select * from test where DATE(date) = '2014-03-19';
http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html
MS SQL 서버에서는 다음과 같이 동작합니다.
select * from test
where
year(date) = 2015
and month(date) = 10
and day(date)= 28 ;
select * from test
where date between '03/19/2014' and '03/19/2014 23:59:59'
이건 정말 나쁜 대답이야.두 가지 이유 때문에.
1. 23.59.59.700 등의 시간에 발생하는 현상23시 59분 59초와 다음날보다 큰 시간이 있습니다.
2. 동작은 데이터 유형에 따라 달라집니다.쿼리는 datetime/date/datetime2 유형에 따라 다르게 동작합니다.
23:59:59.999로 테스트하면 데이터 유형에 따라 다른 반올림을 얻을 수 있기 때문에 상황이 더욱 악화됩니다.
select convert (varchar(40),convert(date , '2014-03-19 23:59:59.999'))
select convert (varchar(40),convert(datetime , '2014-03-19 23:59:59.999'))
select convert (varchar(40),convert(datetime2 , '2014-03-19 23:59:59.999'))
- 날짜의 경우 값이 '잘라짐'입니다. - 날짜의 경우 값은 다음 날짜로 반올림됩니다.(가장 가까운 값).-- datetime2의 경우 값은 정확합니다.
이것을 사용하다
select * from TableName where DateTimeField > date() and DateTimeField < date() + 1
이거 드셔보세요
select * from test where Convert(varchar, date,111)= '03/19/2014'
이거 드셔보세요
select * from test where DATEADD(dd, 0, DATEDIFF(dd, 0, date)) = '03/19/2014';
날짜와 언어에 문제가 있어 이를 회피하는 방법은 YYYYMMDD 형식의 날짜를 요청하는 것입니다.
아래 링크에 따라 이 방법이 가장 빠를 것입니다.SQL Server 2012에 체크인을 했고 링크에 동의합니다.
select * from test where date >= '20141903' AND date < DATEADD(DAY, 1, '20141903');
시간 부분을 잘라내는 다음 방법을 사용할 수 있습니다.
select * from test
where convert(datetime,'03/19/2014',102) = DATEADD(dd, DATEDIFF(dd, 0, date), 0)
-- Reverse the date format
-- this false:
select * from test where date = '28/10/2015'
-- this true:
select * from test where date = '2015/10/28'
이 기능을 사용하여WHERE절을 클릭합니다.
아래의 "SubmitDate" 부분은 열 이름이므로 직접 삽입하십시오.
그러면 결과의 "Year" 부분만 반환되며 최소 시간 등은 생략됩니다.
Where datepart(year, SubmitDate) = '2017'
select *, cast ([col1] as date) <name of the column> from test where date = 'mm/dd/yyyy'
은 날짜와 이 "col1"인 입니다.
이름>은 원하는 대로 할 수 열 이름>은, 「열 이름」입니다.
select *
from invoice
where TRUNC(created_date) <=TRUNC(to_date('04-MAR-18 15:00:00','dd-mon-yy hh24:mi:ss'));
이 쿼리를 테스트합니다.
SELECT *,DATE(chat_reg_date) AS is_date,TIME(chat_reg_time) AS is_time FROM chat WHERE chat_inbox_key='$chat_key'
ORDER BY is_date DESC, is_time DESC
select * from invoice where TRANS_DATE_D>= to_date ('20170831115959','YYYYMMDDHH24MISS')
and TRANS_DATE_D<= to_date ('20171031115959','YYYYMMDDHH24MISS');
SELECT * FROM test where DATEPART(year,[TIMESTAMP]) = '2018' and DATEPART(day,[TIMESTAMP]) = '16' and DATEPART(month,[TIMESTAMP]) = '11'
trunk(column)를 사용합니다.
select * from test t where trunc(t.date) = TO_DATE('2018/06/08', 'YYYY/MM/DD')
언급URL : https://stackoverflow.com/questions/22506930/how-to-query-datetime-field-using-only-date-in-microsoft-sql-server
'programing' 카테고리의 다른 글
| Swift의 NSString에서 NSData 작성 (0) | 2023.04.15 |
|---|---|
| MVVM 동기 컬렉션 (0) | 2023.04.15 |
| Bash에서 문자를 반복하려면 어떻게 해야 하나요? (0) | 2023.04.15 |
| 장고: openpyxl 워크북을 첨부 파일로 저장 (0) | 2023.04.15 |
| SQL 서버에서 INSER JOIN을 사용하여 여러 테이블에서 삭제하려면 어떻게 해야 합니까? (0) | 2023.04.15 |