Firebird의 Timestamp에서 특정 년월일만을 검색하는 방법

select * from testLOG
where
    extract(year from logStamp) > 2007 and
    extract(month from logStamp) = 1 and
    extract(day from logStamp) < 10 and

extract를 사용하면 TIMESTAMP형 필드에서 년,월,일에 대해 검색하기가 쉬워진다.
Posted by 띠리

Firebird의 Timestamp형을 문자열로 바꾸는 SQL문

SELECT CAST(timestamp_column AS VARCHAR(24)) FROM table_name;

이거 찾는라고 반나절 걸렸다.
Posted by 띠리

Timestamp형에서 날짜와 시간을 분리하는 SQL
SELECT 
    cast(extract(day from myTIMESTAMP)|| '.'||
           extract(month from myTIMESTAMP)|| '.'||
           extract(year from myTIMESTAMP) as date) ,
    cast(extract(Hour from myTIMESTAMP)|| ':'||
           extract(Minute from myTIMESTAMP)|| ':'||
           extract(Second from myTIMESTAMP) as Time) 
FROM MyLOG

위의 SQL문을 쓰면 Timestamp형 필드를 날짜형과 시간형으로 바꾸어준다.

TIMESTAMP형 WHERE문
SELECT  * FROM MyLOG
WHERE myTIMESTAMP > '2009-1-7 12:00:00'

SELECT  * FROM MyLOG
WHERE myTIMESTAMP > '2009-1-1'

Timestamp에서 WHERE문을 쓸 때는 날짜만 써도 된다.
아마도 날짜만 입력하면 뒤에 자동으로 00:00:00으로 처리하는 것 같다.
Posted by 띠리
데이터베이스의 날짜를 입력할때 간간히 헤깔리는 경우가 있다.
"1998-12-31"으로 입력해야되는지
"1999/12/31"으로 입력해야되는지
"19991231"으로 입력해야되는지가...

MySQL의 date, time, date_time, time_stamp의 입력형식

우선 MySQL에서 아무 데이터베이스나 선택해서 밑에 테이블은 만든다.

CREATE TABLE InputTest (date date, time time, date_time datetime, time_stamp timestamp);

아래와 같은 형식으로 데이터를 입력하면 문제없이 데이터가 입력된다.

INSERT INTO InputTest VALUES
("1998-12-31", "23:59:59", "1998-12-31 23:59:59",19981231235959);

date_time이나 time_stamp는 두가지 입력방식이있다.
 ① yyyy-mm-dd hh:mm:ss
 ② yyyymmddhhmmss

INSERT INTO InputTest VALUES
("1998-12-31", "23:59:59", 19981231235959,"1998-12-31 23:59:59");

밑의 예제와 같이 입력을하면 에러가 뜬다.

INSERT INTO InputTest VALUES
("1999/12/31", "13:59:59", "1998/11/31 21:59:59",19991231235959);

ERROR 1136 (21S01): Column count doesn't match value count at row 1

문제없이 입력된 데이터를 보면 아래와 같다.

mysql> select * from inputtest;
+------------+----------+---------------------+---------------------+
| date       | time     | date_time           | time_stamp          |
+------------+----------+---------------------+---------------------+
| 1998-12-31 | 23:59:59 | 1998-12-31 23:59:59 | 1998-12-31 23:59:59 |
+------------+----------+---------------------+---------------------+
1 row in set (0.00 sec)

만들어진 테이블의 정보를 보면 아래와 같다

mysql> desc inputtest;
+------------+-----------+------+-----+-------------------+-------+
| Field      | Type      | Null | Key | Default           | Extra |
+------------+-----------+------+-----+-------------------+-------+
| date       | date      | YES  |     | NULL              |       |
| time       | time      | YES  |     | NULL              |       |
| date_time  | datetime  | YES  |     | NULL              |       |
| time_stamp | timestamp | NO   |     | CURRENT_TIMESTAMP |       |
+------------+-----------+------+-----+-------------------+-------+

위의 표를 보면 timestamp는 디폴트 값이 있다.
timestamp의 값은 입력을 하지 않으면 자동으로 현재 일시를 입력해준다.
(그래서 시간 도장이란 이름이였군)

Posted by 띠리
BLOG main image
프로그래밍 공부하면서 써가는 개인 노트 (따라서 여기에 씌여있는 소스의 신빙성을 보장 못함 -.-;;) 이 블로그 보면서 틀린 점이 있으면 꼬옥 알려주세요. by 띠리

공지사항

카테고리

분류 전체보기 (323)
Win32 SDK 초보 (27)
통신관련 (11)
MFC TIP (20)
C/C++ TIP (10)
개발기타 (10)
링크 (2)
견물생심 (24)
이것저것 (8)
용어메모 (3)
데이터베이스 (32)
비주얼 베이직 (10)
하드웨어 (3)
C# (42)
Xcode (3)
델파이 (82)
홈페이지 (5)
MindStorm (0)
낙서 (5)
스크래치 (0)
기타 (6)
아두이노 (1)
라즈베리파이 (2)
안드로이드 (6)
파이썬 (0)
WEB (2)
Total : 977,910
Today : 80 Yesterday : 132