SQL 명세서 도움말 - 오늘 주문한 고객을 선택하십시오
문제
고객 주문 ID를 저장하는 테이블이 있다고 가정 해 봅시다. 와 같은
| 고객 ID | 주문 ID | 주문 날짜
오늘 주문한 모든 고객을 어떻게 얻을 수 있습니까?
또한 OrderDate는 DateTime입니다.
같은 것
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate > Today
그러나 마지막 부분은 내가 알아낼 수없는 것입니다.
해결책
DateTime에서 날짜 만 원하는 것은 상당히 일반적입니다. RDBMS의 세부 사항은 Google에 문의 할 수 있어야합니다 (언급하지 않기 때문에). 중요한 비트는 쿼리를 만드는 것입니다 사기 가능 변환으로 오늘 데이트1 - 주문 날짜가 아닙니다.
MSSQL의 경우,
SELECT DISTINCT CustomerID
FROM TableName
--I assume you want midnight orders as well - so use >=
Where OrderDate >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
오늘 날짜를 섭취하여 작동 할 것입니다. 날짜는 0입니다.DATEDIFF(dd, 0, GETDATE())
) 그리고 데이트 0에 다시 추가 (0) (DATEADD(dd, 0, x)
). 그래도 T-SQL에 따라 다릅니다.
1 임의의 날짜를 검색하는 경우에도 여전히 두 가지 인수를 전환 할 것입니다.
SELECT DISTINCT CustomerID
FROM TableName
Where
OrderDate >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
--You *do not* want midnight of the next day, as it would duplicate orders
AND OrderDate < DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()) + 1)
다른 팁
Oracle에서 진술은 다음과 같은 것처럼 보일 것입니다.
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate >= trunc(sysdate)
SQL-Server는 비슷해야합니다
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate = CAST(GetDate() AS NUMERIC)
또는
SELECT DISTINCT CustomerID
FROM TableName
Where CAST(OrderDate AS NUMERIC) = CAST(GetDate() AS NUMERIC)
주어진 날짜에 대해 다른 시간에 같은 숫자를 반환한다는 것을 알려고 노력했습니다. 따라서 날짜가 숫자 값으로 변환 된 경우 작동해야합니다.
SELECT CAST(0 AS DATETIME)
1900 년 1 월 1 일 오전 12시 00시 반환
제휴하지 않습니다 StackOverflow