2013-06-04 3 views
0

PostgreSQL을 데이터베이스로 사용하여 PHP를 사용하여 출석 응용 프로그램을 개발하고 있습니다. 여기 PostgreSQL - 시간과 값의 비교> 24:00

내 테이블 : 문자에서 (50)
  • 변화 - - 시간대없이 시간을
  • 아웃 - -
  • 이름, PK INT

    • ID 시간 시간대없이

    기본적으로 지정된 시간에 몇 명이나 있는지 확인하고 싶습니다. 예를 들어 입력이 08:00 인 경우 08:00 이전에 로그인하고 08:00 이후에 로그 아웃 한 모든 사람이 계산됩니다.

    내가 만난 문제는 Out < In 인 것으로, 이는 00:00 전에 로그인하고 00:00 이후에 로그 아웃 한 사람을 의미합니다. 는 I는 다음의 SQL을 사용하여이 문제를 해결하려고 시도 :

    SELECT COUNT(*) FROM(
    SELECT tbl_1."ID" FROM attendance as tbl_1 WHERE "In" < "Out" AND "In" < '$input' AND "Out" > '$input' 
    UNION 
    SELECT tbl_2."ID" FROM attendance as tbl_2 WHERE "Out" < "In" AND "In" < '$input2' AND "Out" > '$input' 
    ) AS tmp_tbl 
    

    $ 입력은 입력 데이터 (문자열)를 저장하는 PHP 변수이다. $ input2는 입력 데이터 +24 시간을 저장하는 PHP 변수입니다 (처음 두 문자를 바꿨습니다).

    하지만 불행히도 나는 PostgreSQL이 값을 24:00 이상으로 비교할 수 없다는 또 다른 문제가 발생했습니다.

    Query failed: ERROR: date/time field value out of range: "35:11:00"

    사람이이 문제에 DateIn 및 DateOut 또 다른 열을 추가 이외의 날을 도와 드릴까요? 날짜에 대한 정보를 저장 하시겠습니까?

    죄송합니다.

  • +0

    당신이 $ 입력에 문제가 :

    당신이 이런 식으로 입력을 사용할 수 있습니다 time에서 interval에 테이블 정의를 변경하는 경우

    . – bksi

    +0

    'in'과'out'은'time' 타입이어야합니까? 'timestamp'를 사용하여 값에 날짜 정보를 추가 할 수 있습니까? 순수한'time' 값을 사용하는 모든 해결 방법보다 더 좋을 것입니다. – Thilo

    +0

    @Thilo 타임 스탬프를 사용하여 시간 비교의 예를 들어 주시겠습니까? 입력란에 고정 날짜를 지정할 수 없습니다. 입력과 전체 표를 비교해보십시오. –

    답변

    2

    글쎄 35:11:00은 유효한 시간이 아닙니다.

    나는 당신의 입력 값을 추측은 (하루에만 24 시간이 있습니다) 유효하지 않은 시간 소인입니다 2013-06-01 35:11:00 같은 것입니다 및 그 포스트 그레스는

    당신은 PHP에서 올바른 타임 스탬프의 계산을해야 할 것 중 하나 불평 (그래서 포스트 그레스에 전달 된 실제 값은 2013-06-02 11:11:00 또는 당신은 날짜 부분과 간격으로 값을 분할하여 해당 "내부"SQL 문을 수행 할 수 있습니다

    뭔가 같은 :

    and "In" < date '2013-06-01' + interval '35:11:00' minute 
    
    ,

    여기서 실제 값은 PHP 변수에서 나옵니다 (그러나 두 부분으로 나뉩니다).


    편집 내가 time되는 열 정의를 놓친 (어떻게 든 timestamp을 읽기).

    은 분명히 당신은 (실제로는 "하루의 시간"이다)에 "시간"저장 하지 있지만 interval 데이터 형식을 사용하여 표시 할 수있는 기간입니다. 것 같다

    and "In" < interval '35:11:00' minute 
    
    +0

    '분'은 '시간'이 아니어야합니까? :-) –

    +0

    @Denis : 지금 당신이 언급 한 ...하지만 그것은 나를 위해 작동합니다 : http://sqlfiddle.com/#!12/d41d8/960 –

    +0

    음, 내 입력 만 "hh : mm : ss 만 저장합니다. "값과 테이블은 타임 스탬프를 사용하지 않습니다. 단지 시간 만 저장합니다. 대신에"date "Out"+ interval '35 : 11 : 00 'minute'와 같이 "sth like"를 할 수 있습니까? –