오늘 날짜와 결과를 비교하시겠습니까?
사용할 수 있는 방법이 있습니까?Now()
SQL에서 오늘 날짜로 값을 선택할 수 있습니까?
나는 그런 인상을 받았습니다.Now()
은 날짜뿐만아니시간포함오만지날늘시짜다간설다음정로니됩으이는하라도설▁set다▁to로 됩니다.00:00:00
그래서 이것이 결코 일치하지 않을 것이라고 생각하십니까?
좋아요, 제대로 해보죠.가능한 경우 인덱스를 사용하여 서로 다른 날짜/시간 유형이 모두 있는 오늘 일치하는 날짜를 선택합니다.
여기서의 원칙은 각각의 경우에 동일합니다.날짜 열이 가장 최근 자정 이후(오늘 시간 00:00:00), 다음 자정 이전(내일 시간 00:00:00)에 있는 행을 가져옵니다.
순수 날짜 유형의 경우 오늘 날짜와 간단한 비교를 수행할 수 있습니다.
에where
아래의 모든 예에서 절).이 경우 모든 비교에 대해 날짜를 계산해야 하므로 전체 테이블 검색이 트리거될 수 있습니다.(이 동작은 DBMS, YMMV에 따라 다릅니다.)
MS SQL Server: (SQL Fiddle | db<>fiddle)
첫째, DATE 사용하기
select * from dates
where dte = CAST(CURRENT_TIMESTAMP AS DATE)
;
이제 DATTIME으로:
select * from datetimes
where dtm >= CAST(CURRENT_TIMESTAMP AS DATE)
and dtm < DATEADD(DD, 1, CAST(CURRENT_TIMESTAMP AS DATE))
;
마지막으로 DATTIME2:
select * from datetimes2
where dtm2 >= CAST(CURRENT_TIMESTAMP AS DATE)
and dtm2 < DATEADD(DD, 1, CAST(CURRENT_TIMESTAMP AS DATE))
;
MySQL: (SQL Fiddle | db<>fiddle)
날짜 사용:
select * from dates
where dte = cast(now() as date)
;
DATTIME 사용:
select * from datetimes
where dtm >= cast((now()) as date)
and dtm < cast((now() + interval 1 day) as date)
;
PostgreSQL: (SQL Fiddle | db<>fiddle)
날짜 사용:
select * from dates
where dte = current_date
;
시간대가 없는 타임스탬프 사용:
select * from timestamps
where ts >= 'today'
and ts < 'tomorrow'
;
Oracle: (SQL Fiddle)
날짜 사용:
select to_char(dte, 'YYYY-MM-DD HH24:MI:SS') dte
from dates
where dte >= trunc(current_date)
and dte < trunc(current_date) + 1
;
TIMESTAMP 사용:
select to_char(ts, 'YYYY-MM-DD HH24:MI:SS') ts
from timestamps
where ts >= trunc(current_date)
and ts < trunc(current_date) + 1
;
SQLite: (SQL Fiddle)
날짜 문자열 사용:
select * from dates
where dte = (select date('now'))
;
날짜 및 시간 문자열 사용:
select dtm from datetimes
where dtm >= datetime(date('now'))
and dtm < datetime(date('now', '+1 day'))
;
유닉스 타임스탬프 사용:
select datetime(dtm, 'unixepoch', 'localtime') from datetimes
where dtm >= strftime('%s', date('now'))
and dtm < strftime('%s', date('now', '+1 day'))
;
SQL Server에는 기본 Now() 기능이 없으므로 다음을 사용해야 합니다.
select GETDATE() --2012-05-01 10:14:13.403
다음을 수행하여 일, 월 및 연도를 개별적으로 얻을 수 있습니다.
select DAY(getdate()) --1
select month(getdate()) --5
select year(getdate()) --2012
sql server 2008에 있는 경우 시간이 아닌 날짜 부분만 있는 DATE 날짜 시간이 있습니다.
select cast (GETDATE() as DATE) --2012-05-01
당신이 무엇을 요구하는지 잘 모르겠어요!
하지만
SELECT GETDATE()
현재 날짜와 시간이 표시됩니다.
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
00:00:00로 설정된 날짜만 알려드리겠습니다.
날짜의 시간 요소를 0으로 설정합니다. 예로 들 수 있습니다.
SELECT DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
했지만, 당신이태 MSSQL 함수를만용사지했,Now()
MySQL이거나 ODBC 함수 호출을 사용하고 있으며, 하나를 다른 하나로 교체하는 경우에도 작동해야 합니다.
정확히 뭘 하려는 건지는 모르겠지만, 그건 마치GETDATE()
당신이 원하는 것입니다. GETDATE()
날짜를 반환하지만 시간 구성 요소에 관심이 없는 경우 날짜를 캐스팅할 수 있습니다.
SELECT GETDATE()
SELECT CAST(GETDATE() AS DATE)
이전 답변을 바탕으로 중요한 점을 유념하십시오. 또한 테이블 열이 날짜/시간 데이터 유형의 시간 조각을 포함하지 않도록 조정해야 합니다.
다음은 위의 내용을 보여주는 작은 샘플 스크립트입니다.
select getdate()
--2012-05-01 12:06:51.413
select cast(getdate() as date)
--2012-05-01
--we're using sysobjects for the example
create table test (id int)
select * from sysobjects where cast(crdate as date) = cast(getdate() as date)
--resultset contains only objects created today
drop table test
이것이 도움이 되길 바랍니다.
편집:
위의 예가 성능에 미칠 수 있는 영향에 대한 @dwurf 의견(감사)에 이어 다음을 제안합니다.오늘 자정(하루 시작)부터 하루의 마지막 밀리초 사이에 날짜 범위를 만듭니다(SQL 서버 수는 최대 .997이므로 3밀리초를 단축합니다).이러한 방식으로 왼쪽을 조작하지 않고 성능에 미치는 영향을 방지합니다.
select getdate()
--2012-05-01 12:06:51.413
select dateadd(millisecond, -3, cast(cast(getdate()+1 as date) as datetime))
--2012-05-01 23:59:59.997
select cast(getdate() as date)
--2012-05-01
create table test (id int)
select * from sysobjects where crdate between cast(getdate() as date) and dateadd(millisecond, -3, cast(cast(getdate()+1 as date) as datetime))
--resultset contains only objects created today
drop table test
저장된 날짜(시간 없음)만 포함된 테이블이 있고 "지금"까지 이 테이블을 가져오려면 다음 작업을 수행할 수 있습니다.
SELECT * FROM tbl WHERE DATEDIFF(d, yourdate, GETDATE())=0
따라서 일별 차이가 0인 행이 생성됩니다(오늘도 마찬가지).
예를 들어 DrawDate와 비교하려는 경우 작동 중인 쿼리는 다음과 같습니다.
CAST(DrawDate AS DATE) = CAST (GETDATE() as DATE)
이것은 오늘 날짜와 결과를 비교하는 것입니다.
또는 전체 쿼리:
SELECT TOP (1000) *
FROM test
where DrawName != 'NULL' and CAST(DrawDate AS DATE) = CAST (GETDATE() as DATE)
order by id desc
이 SQL 코드를 사용해 볼 수 있습니다.
SELECT [column_1], [column_1], ...
FROM (your_table)
where date_format(record_date, '%e%c%Y') = date_format(now(), '%e%c%Y')
시도할 수 있습니다.
WHERE created_date BETWEEN CURRENT_TIMESTAMP-180 AND CURRENT_TIMESTAMP
이것은 저에게 효과가 있었습니다.
SELECT * FROM table where date(column_date) = curdate()
언급URL : https://stackoverflow.com/questions/10395459/comparing-results-with-todays-date
'programing' 카테고리의 다른 글
바이트 문자열을 int로 변환하는 방법은 무엇입니까? (0) | 2023.07.03 |
---|---|
UI 이미지:크기 조정 후 자르기 (0) | 2023.07.03 |
여기에 "오픈 깃배시"를 추가하는 방법.윈도우 탐색기의 상황에 맞는 메뉴? (0) | 2023.07.03 |
ctrl-c를 사용하지 않고 플라스크 적용을 중지하는 방법 (0) | 2023.07.03 |
ASP.Net 마스터 페이지 및 파일 경로 문제 (0) | 2023.07.03 |