문제

나는 실행 Access2003.내가 사용하여 스위치를 선택하는 날짜 필드를 기반으로 boolean 기준:

Switch(<criterion>, Date1, 1, Date2)

즉,는 경우에는"조건"사실,그 반환 Date1,그렇지 않으면 반환 Date2.

Date1 및 Date2 은 날짜/시간 형식 열 표입니다.

문제,스위치는 반환을 텍스트로-니 날짜/시간!

하는 방법이 있는 힘으로 그들을 날짜 ness?나

Switch(<criterion>, #Date1#, 1, #Date2#)

Switch(<criterion>, Val(Date1), 1, Val(Date2))

모두 실패하고 하나는 오류 메시지 또는 다른입니다.

어떤 아이디어가?

도움이 되었습니까?

해결책

iif ()] 함수가 당신이하려는 일에 더 잘 일치한다면 즉각적이라고 생각합니다.

IIf(<criterion>, Date1, Date2)

그러나 스위치 () 함수는 데이터 유형을 중단해서는 안되며 날짜/시간 데이터 유형과 호환되지 않아야합니다. 이 기능을 고려하십시오 :

Public Function trySwitch(ByVal pWhichDay As String) As Variant
    Dim varOut As Variant
    varOut = Switch(pWhichDay = "yesterday", Date - 1, _
        pWhichDay = "today", Date, _
        pWhichDay = "tomorrow", Date + 1)
    trySwitch = varOut
End Function

트리 스위치 ( "오늘") 보고 10/6/2009 그리고 typeName (Tryswitch ( "Today")) 보고 날짜

다른 팁

당신의 모범에는 이상한 것이 있습니다.

스위치는 표현식 쌍을 받아들이고 첫 번째가 true로 평가되면 쌍 값이 반환됩니다. 그렇지 않으면 두 번째로 전달되어 해당 인수를 평가합니다.

당신은 1을 true로 취급하는 것 같습니다. 그것은 fales가 아니기 때문입니다. 그러나 당신은 다음과 같이 더 나을 것입니다.

  Switch(<criterion>, Date1, True, Date2)

그러나 이것은 즉각적인 IF 함수, iif () 및 iif ()의 기능의 복제 일뿐입니다.

그러나 변형을 반환한다는 점에서 동일한 문제가 있습니다. 그러나 날짜로 서식 할 수있는 데이터 유형으로이를 강요 할 수 있어야합니다.

그러나 해당 변형이 암시 적으로 강요 될지 여부는 명시 적으로 수행 해야하는지 여부는 사용하는 위치에 따라 다릅니다. 쿼리 결과에서 열이 날짜 유형에 강요되므로 IIF ([Criterion], Date1, Date2)의 출력을 날짜로 정렬 할 수 있습니다.

강요를 명시 적으로 수행 해야하는 경우 CDATE ()는 사용 기능입니다. 변형 출력이 현재까지 명시 적으로 강요되는지 확인하기 위해 CDATE () 함수로 변형 출력을 생성하는 외부 기능을 래핑합니다. 유형:

  CDate(IIf(<criterion>, Date1, Date2))

하지만 완전히 다른 트랙에서 벗어난 것처럼 보이기 때문에 여기서 중요한 것을 놓치고있을 것입니다 ...

게시할 수 있습니 코드 및 데이터 문제를 재현하십시오?이 SWITCH() 에서 SQL 코드를 생각 하는 다음 SQL DDL(CREATE TABLE 등)DML(INSERT INTO 추가 데이터)를 가장 적합합니다:)

[까다로운점:액세스 SQL 데이터베이스하지 않는'boolean'데이터를 입력합니다.그 YESNO 데이터 입력이 될 수 있는 NULL 치세치 논리지합니다.]

여기에 몇 가지 SQL DML(ANSI-92 모드 쿼리 구문에)어떻게 입증하는 예상대로 작동하는 나를 위해:

SELECT TYPENAME
       (
          SWITCH
          (
             NULL, #2009-01-01 00:00:00#, 
             FALSE, #2009-06-15 12:00:00#, 
             TRUE, #2009-12-31 23:59:59#
          )
       );

변경의'표준'값과 값은 항상으로 반환 날짜',즉의 유형 DATETIME.


업데이트:

TYPENAME 기능입 ...도구액세스 보 해석 전체"란"resultset 르

참이다.기 때문에 열 수 있는 단 하나의 데이터 타입의 결과 TYPENAME() 행는 오해의 소지가 있을 수 있습니다.행 값의 혼합형 해야 합'승'을 높은 데이터를 입력합니다.가 액세스는 데이터베이스 엔진,프로세스는 완전히 불투명 및 문서에 주제를 완전히 결석,그래서 당신은 단지 그것을 빨고 예:

SELECT #2009-01-01 00:00:00# AS row_value, 
       TYPENAME(#2009-01-01 00:00:00#) AS row_type
  FROM Customers
UNION ALL
SELECT 0.5, 
       TYPENAME(0.5) AS row_type
  FROM Customers

반환 날짜'과'소수'각각하지만 어떤 열 수?분명히 대답입니다:

SELECT DT1.row_value, TYPENAME(DT1.row_value) AS column_type
  FROM (
        SELECT DISTINCT #2009-01-01 00:00:00# AS row_value 
          FROM Customers
        UNION ALL
        SELECT DISTINCT 0.5
          FROM Customers
       ) AS DT1;

'문자열'?!

...물론하지 않도 액세스는 데이터베이스 엔진 SQL 데이터를 입력합니다.그래서 TYPENAME(),귀찮게,이름을 사용합니'가장 적합'VBA 유형입니다.예를 들어:

SELECT TYPENAME(CBOOL(0));

반환'Boolean'에도 불구하고,논의한 바와 같이,이 없 Boolean 데이터 유형에 액세스는 데이터베이스 엔진 SQL.고

SELECT TYPENAME(my_binary_col)

반환'문자열'입니다.참고 동일한 VBA 매핑 제한 적용 CAST 기능(그러나 또 다른 두통)등이 없다'캐스팅 BINARY'기능과 CDEC() 기능 유지를 깨진 이후 Jet4.0:(

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top