에 결과를 비교는 때때로 캐스팅 날짜 시간에 DateTimeOffset으로는 UTC날짜 시간에 DateTimeOffset으로 캐스팅 및 날짜 시간
나는 특정 날짜 사이에 발생하는 모든 주문을 찾고 싶은로 다시하는 DateTimeOffset 필드를 취할 것으로 보인다. OrderDateTime은 DateTimeOffset으로 저장됩니다. 이 쿼리에 대한
DECLARE @StartDate DATETIME = '20130723'
,@EndDate DATETIME = '20130724'
SELECT cn.orderdatetime,
LocalTime = CAST(orderdatetime AS datetime),
facilityid
FROM ConsignmentNote cn
WHERE CAST(OrderDateTime AS DATETIME) BETWEEN @StartDate AND @EndDate
결과는 (당신이 기대하는 것처럼)
OrderDateTime LocalTime Facilityid
2013-07-23 08:26:02.9120644 +10:00 2013-07-23 08:26:02.913 84
2013-07-23 08:27:43.9571506 +10:00 2013-07-23 08:27:43.957 84
2013-07-23 10:24:54.2930893 +10:00 2013-07-23 10:24:54.293 84
그러나 나는 또한 facilityID 설정이 결과를 필터링해야 - 나는 쿼리에 facilityId를 추가하는 경우 만 :
DECLARE @StartDate DATETIME = '20130723'
,@EndDate DATETIME = '20130724'
SELECT cn.orderdatetime,
LocalTime = CAST(orderdatetime AS datetime),
facilityid
FROM ConsignmentNote cn
WHERE CAST(OrderDateTime AS DATETIME) BETWEEN @StartDate AND @EndDate
AND FacilityId = 84
나는 다음과 같은 결과를 얻을 수
orderdatetime LocalTime facilityid
2013-07-23 10:24:54.2930893 +10:00 2013-07-23 10:24:54.293 84
무엇을 제공합니까? 쿼리에 다른 매개 변수를 추가하면 날짜가 왜 잘못됩니까?
그냥 그 점을 증명하기 위해 (facilityID NB consignmentNote 표 INT입니다) - 나는 하루에 다시 STARTDATE를 이동하는 경우 '20130722'이 나는 결과의 3 행은 내가 나타 내기 위해 보인다, 찾고 있어요 얻을 :
CAST (OrderDateTime as DateTime)
은 SELECT 또는 WHERE 절에 다른 매개 변수가 있는지에 따라 다르게 처리됩니다 (예 :?). (글쎄 그것은 균일 한 치료로 보이지 않는다)
누구든지이 문제를 해결하기 위해 어떤 방향으로 나를 가리킬 수 있습니까? 이 서비스 팩 또는 핫픽스
마이크로 소프트 SQL 서버 2008 R2 (SP1)이 될 수 - 10.50.2500.0 (X64) 6 월 17 일 2011 0시 54분 3초 저작권 (c) Microsoft의 엔터프라이즈 에디션 (64 비트) Windows NT 6.1의 경우 (빌드 7601 : 서비스 팩 1)
btw -이 값만있는 테이블을 만들면 모든 문제없이 (아래 코드) 예상대로 작동합니다. 그래서 그것은 환경 적이어야합니다 - 네?
CREATE TABLE #temp (orderdatetime DATETIMEOFFSET,facilityid int)
INSERT INTO #temp VALUES ('2013-07-23 08:26:02.9120644 +10:00',84)
INSERT INTO #temp VALUES ('2013-07-23 08:27:43.9571506 +10:00',84)
INSERT INTO #temp VALUES ('2013-07-23 10:24:54.2930893 +10:00',84)
SELECT orderdatetime,CAST(orderdatetime AS datetime),facilityid
FROM #temp
WHERE CAST(OrderDateTime AS DATETIME) BETWEEN @StartDate AND @EndDate
AND facilityid =84
DROP TABLE #temp
예, 열은 색인의 일부입니다. 업데이트를 적용하고 알려 드리겠습니다 ... 도움을 주셔서 감사합니다. – Trubs