2011-10-22 2 views
0

타임 스탬프 날짜가 포함 된 VARCHAR 필드 completion_date (예 : 1319193919)이 있습니다. NOW()과 비교하는 필드에서 쿼리를 실행할 수 있습니까? 나는 노력하고있다 :MySQL은 날짜를 타임 스탬프와 비교합니다.

SELECT * FROM (`surveys`) WHERE `active` = '1' AND `archived` = '0' AND `completion_date` > 'NOW()' 

그러나 실제로 결과는 내가 바라는 바가 아니며, VARCHAR의 원인인가? 그렇다면 어떤 종류의 날짜 필드를 사용해도 좋을까요? 데이터는 Linux 타임 스탬프로 남아 있어야합니다. UNIX_TIMESTAMP()

SELECT * 
FROM (`surveys`) 
WHERE `active` = '1' AND `archived` = '0' AND `completion_date` > UNIX_TIMESTAMP(NOW()) 
또한

는 따옴표를 제거하여 타임 스탬프에

답변

3

변환 NOW() 당신은 주위 'NOW()'

mysql> SELECT UNIX_TIMESTAMP(NOW()); 
+-----------------------+ 
| UNIX_TIMESTAMP(NOW()) | 
+-----------------------+ 
|   1319288622 | 
+-----------------------+ 

N.B.했다 필요할 경우,이 함수의 역함수는 시간 소인을 기본 MySQL DATETIME 형식으로 변환하는 FROM_UNIXTIME()입니다.

아래 설명에서 언급했듯이 변경이 가능한 경우이 데이터에는 VARCHAR() 대신 실제 DATETIME 유형을 사용하는 것이 좋습니다.

+2

이미 좋은 답변을 완료하려면 : 형식을 지정하지 않고도 쉽게 날짜를 저장하려면 필드 유형으로 DATETIME/TIME/DATE를 사용하십시오. VARCHAR는 비록 당신이 기능을 필요로하지 않는다면 더 빠릅니다! – Anonymous

0

Linux 타임 스탬프를 BIGINT (또는 지정되지 않은 INT)에 쉽게 저장할 수 있으므로 수행하려는 비교 유형이 쉽게 가능합니다. VARCHAR는 숫자가 아닌 어휘를 사용하고 비교는 당신이 원하는 것이 아닙니다. BIGINT와 함께 NOW()UNIX_TIMESTAMP()으로 변환하면 원하는 것을 얻을 수 있습니다.

DATETIME 데이터 형식을 사용하여 데이터를 저장하고 데이터를 선택할 때 변환하는 것이 더 나을 수도 있습니다. DATETIME 미래로 저장하면 Linux 타임 스탬프가 적절하지 않은 다른 플랫폼으로 이동하거나 추가하는 경우 응용 프로그램을 증명할 수 있습니다. 그런 다음 코드를 수정하고 데이터를 변환하지 않고 계속 작동시켜야합니다. 저는 현재 날짜가 문자 데이터로 저장되어 있던 프로젝트에서 일하고 있습니다. 새로운 데이터와 함께 오래된 데이터를 사용하는 데 어려움이 없지만, 시간을 저장하고 있기 때문에 우리보다 문제가 적을 수도 있습니다. 스탬프 (서식있는 날짜 아님).

관련 문제