안드로이드의 sqlite 데이터베이스를 사용하는 도중 이상한 점을 하나 발견했다.
time 데이터타입에서 00시 또는 24시, 즉 자정일때 time() 함수가 먹히질 않는다는 점이다.
예를 들면,
(time 데이터타입의 field1 시각 + int 데이터타입의 field2 초) > 특정시각
을 비교할때
SELECT * FROM table1 WHERE time(field1, field2 ||' seconds') > 23:59:30
와 같이 사용한다.
하지만 이때, field1이 23:59:00 이고 field2가 60초 이상이면 자정이 넘어가면서 SELECT 결과가 항상 아무것도 안나오게 된다. field1이 24:00:00 이상이어도 마찬가지다.
이걸 해결하기 위해 만방으로 살펴봤지만... 역시 코딩은 꼼수가 최고다.
그냥... 자정이 넘어갈것 같으면 시간을 앞당겨주면 된다ㅎㅎ
다음과 같이 해보자~
private String getTime(String time, String addtime) {
return "time('" + time + "'" + addtime + ")";
}
private String getTime(String field, String addfield, String addtime) {
return "time(" + field + "," + addfield + "||' seconds'" + addtime + ")";
}
private Cursor fetch(SQLiteDatabase db, String time) {
//특정시각 time이 21시보다 크면 3시간을 앞당겨 준다.
String addText = Integer.parseInt(time.substring(0, 2)) < 22 ? "" : ",'-3 hours'";
return db.rawQuery("SELECT * FROM table1 WHERE " + getTime("field1", "field2", addText) + "<" + getTime(time, addText), null);
}
자정이 넘어 갔을때 시간을 앞당겨 비교해 주면 정상적으로 작동한다.
도움이 되셨다면~ 정성으로 빚은 저희 앱! 많은 이용 바래요:)
https://meorimal.com/index.html?tab=spaceship
https://meorimal.com/subway.html
'개발 > android' 카테고리의 다른 글
Dialog를 닫았는데 background로 나갔다 들어오니 다시 열린다??? (0) | 2019.03.13 |
---|---|
EditText에 자동으로 단위 콤마 넣기 (0) | 2019.01.17 |
Intent 전달 방식을 모방하여 부모 activity를 호출하기 (0) | 2018.06.07 |
ListView에 EditText를 넣을때 반드시 살펴봐야 할점 (0) | 2017.09.11 |
부등호 없는 부등식 소스를 짜보자 (0) | 2017.06.27 |