2016-07-26 2 views
1

이 질문에 계속 대답 The SQL result is inaccurate because of wrong SQL date comparison settingA & B 사이의 날짜를 정확하게 선택하는 방법은 무엇입니까?

excel-VBA에서 ADO를 사용하여 Excel에서 SQL을 실행하면 결과가 Excel 워크 시트에 표시됩니다. "날짜"라는 필드가 워크 시트에 있습니다

2014201520162017

데이터 예 :/2014

1/2/2014,7/1/2014,23/10 이 필드의 데이터 유형은 일/월/년이며 날짜는 = DATE (cell1, cell2, cell3) - 년, 월, 일에 의해 결합됩니다. 나는 1 개 필드 (날짜)


지금, 나는 FROMDATE 및 TODATE 사이의 날짜 범위를 설정할로 3 세포 (년, 월, 일)을 결합으로 테이블의 날짜가 모두 포함 된 두 (순수하게 일을해야한다 여기)

' This SQL select the date between date-VARIABLE: fromdate & toDate 

WHERE date >= #" & fromdate & "# AND date<#" & toDate & "#" 

전체 SQL은 :

SELECT officer ,NULL, SUM(IIF(isnumeric(mkt) = true and Survey='CPI' and Activity='FI' and Outcome= 'C', Totalmin, 0)/468) , SUM(IIF(isnumeric(Non) = true and Survey='CPI' and Activity='FI' and Outcome= 'C', Totalmin, 0)/468) ,NULL ,NULL , IIF(ISNULL(sum(mkt)),0,sum(mkt)),Sum(Non),sum(ICP),(sum(mkt)+Sum(Non)+sum(ICP)) ,NULL,NULL,NULL,count(IIF(Survey='CPI' and Activity='FI' ,Totalmin, NULL)),NULL,count(IIF( Survey='CPI' and Activity='FI' and (Outcome ='C' OR Outcome='D'OR Outcome='O') , Totalmin, NULL)),NULL,SUM(IIF(Survey='CPI' and Activity='FI' ,Totalmin, 0)),NULL,SUM(IIF(Survey='CPI' and Activity='FI' and (Outcome ='C' OR Outcome='D') ,Totalmin, 0)) 
From (
    select officer ,rank ,year ,month ,day , survey ,activity ,outcome ,mkt,non,totalmin,ICP ,date 
    from [2014$] 
    UNION ALL 
    select officer ,rank ,year ,month ,day , survey ,activity ,outcome ,mkt,non,totalmin,ICP ,date 
    from [2015$] 
    UNION ALL 
    select officer ,rank ,year ,month ,day , survey ,activity ,outcome ,mkt,non,totalmin,ICP ,date 
    from [2016$] 
    UNION ALL 
    select officer ,rank ,year ,month ,day , survey ,activity ,outcome ,mkt,non,totalmin,ICP ,date 
    from [2017$] 
)as table3 
where officer is not null and officer <> '' and officer <> ' ' 
and date >= #" & fromDate & "# AND date<#" & toDate & "#" 
group by officer 

는 다음 나는 SQL 결과는 동작하지만 결과는 정확하지 않습니다.


나중에 하드 코드로 테스트하려고합니다. 예를 들어 2016 년 3 월에 레코드를 선택하려고합니다.이 where 절을 사용합니다.

where month=3 and year=2016 

괜찮습니다.

그런 다음 아래의 구문을 사용하려고했습니다. 그들은 괜찮지 않습니다.

where date between #2016-03-01# and #2016-04-01#

where date >= #2016-03-01# AND date<#2016-04-01# 

그런 다음 나는 하나가 엑셀 또는 VBA에서 날짜 데이터 형식 문제가 될 전망이다.

그럼, 아래 이러한 테스트하려고 노력 : Excel 용

를 원래의 데이터 타입은 날짜입니다. 문자열, 숫자, 일반으로 변경합니다. 괜찮습니다.

Date sample: 6/1/2016 
String sample: 42375 
Numeric sample: 42375.00 

VBA의 경우, 나는 하루를 바꿔 보았습니다. -> # 2016년 1월 3일 여전히 # OKAY되지 않음

자세한 정보는 fromDate 접미사를 들어

에게 0의 시점을 시도 The SQL result is inaccurate because of wrong SQL date comparison setting

답변

0

두 가지를 참조하여 toDate 접미사 A의 수 날짜를 가리키는 시점입니다. 또한

fromDate = 01/01/2016 00:00:00 
    toDate = 02/02/2016 23:59:59 

는 많은 미국까지 간다 나는 지금 내 모든 작품이 사용 가능하면 3 편지 옵션으로 달을주고 나에게 반대로 그들은 MM은/DD/YYYY을 DD/MM/YYYY를 사용하는 영국. 01/Jan/2016을 출력하면 사용자 또는 시스템이 월 필드를 혼동하지 않습니다.

+0

및 날짜> = 01/3 월/2016 00 : 00 : 00 # 및 날짜 <# 01/Apr/2016 00 : 00 : 00 # 하드 코드로 테스트하려고했습니다. 결과는 정확하지 않습니다. – Monchhichi

관련 문제