2016-08-21 2 views
0

내 표는 다음과 같습니다 일 : 나는 'X'일에 걸쳐있는 행을 삭제할SQLite는 타임 스탬프 행을 삭제 <X

tx.executeSql(
    "INSERT OR REPLACE INTO mytable 
    (msg_id, msg_when, msg_read, title, msg_text) 
    VALUES 
    (?,?,?,?,?)", 

:

tx.executeSql(
    "CREATE TABLE IF NOT EXISTS mytable (
     msg_id UNSIGNED INT PRIMARY KEY ASC, 
     msg_when DATETIME, 
     msg_read INTEGER, 
     title TEXT, msg_text TEXT 
    )", 

내가이 쿼리를 사용하여 레코드를 추가 이 쿼리를 사용하고 있지만 아무것도 삭제되지 않습니다. 성공 콜백은 아무런 영향을 미치지 않고 호출됩니다.

tx.executeSql(
    "DELETE FROM mytable 
    WHERE msg_when <= datetime('now', '-? days')", [days], 

나는 또한 시도했다 :

var strQuery = "DELETE FROM mytable 
    WHERE msg_when <= datetime('now', '-" +days +" days')"; 
tx.executeSql(strQuery, 

과 :

날짜별로 행을 삭제하는 것보다 다른
json: {"status":"OK" 
,"count":1 
,"msg_id":"94" 
,"when":"2016-08-23 11:21:01" 
,"alerts":[ 
    {"msg_id":"44" 
    ,"title":"Medical Emergency" 
    ,"text":"Heart Attack" 
    ,"msg_when":"2016-08-05 14:52:03" 
    } 
    ] 
} 

, 모든 것이 : 같은

var strQuery = "DELETE FROM mytable 
    WHERE msg_when <= datetime('now', '-4 days')"; 
tx.executeSql(strQuery, 

데이터 보인다 완벽하게 잘 작동합니다. 삭제를 수정하기 위해 내가 할 수있는 것에 대한 제안 사항이 있습니까?

답변

0

좋아, 실제로이 문제를 해결하는 두 가지 트릭있다 : 당신은 연결 연산자 (||)를 사용합니다.

먼저 필드를 datetime (정수 이상)으로 선언하면이 필드가 작동하지 않습니다. 안드로이드에서는 안되고 안드로이드에서는 안되고 Windows에서는 Chrome 52.0.2743.116 m (64 비트)이 아닙니다.

당신이해야 할 일은 TEXT 필드로 날짜를 저장하고 날짜 시간을 이 같은 문자열 :

tx.executeSql("CREATE TABLE IF NOT EXISTS mytable (msg_id UNSIGNED INT PRIMARY KEY ASC, msg_when TEXT, msg_read INTEGER, title TEXT, msg_text TEXT)", 

다음으로, (괄호)에 비교를 포장해야합니다 있도록이 같은 sqlite가 공식으로 취급을하고 당신을 위해 수학 변환을 수행 ... :

tx.executeSql(DELETE FROM mytable WHERE (msg_when <= datetime('now', '-4 days'))", 

(msg_when 열 앞에 및 datetime에서 닫는 괄호 뒤에) 괄호에 주목하십시오.) func .

2

DELETE 문의 문제점은 매개 변수 템플릿 (?)이 문자열 리터럴 내에 있으므로 무시됩니다.

DELETE FROM mytable WHERE msg_when <= datetime('now', '-' || ? || ' days') 
+0

그래도 문제가 해결되지 않습니다. 참고로, 나는 또한 시도했다 : mytable에서 DELETE WHERE msg_when <= datetime ('now', '- "+ days +"days') 그리고 올바른 문자열을 만든다. (내 경우에는 -4 일이지만 3 주 이상 된 메시지가있는 경우 – ppetree

+0

작동하지 않는 경우 질문에 샘플 데이터를 포함해야합니다. 날짜/시간이 ISO 8601 문자열로 SQLite에 저장되며 이는 date 함수가 반환하는 것입니다. . 데이터가 해당 형식이 아닌 경우 작동하지 않습니다 .SQLite는 형식을 적용하지 않습니다 ** - 열 유형을 적용하지 않는 것처럼 말입니다. – cartant

+0

정보를 보내 주셔서 감사합니다. datetime은 정확합니다. mysql에서 json 문자열로 전달 된 'YYYY-MM-DD hh : mm : ss'는 msg_when이라고 유명합니다. ;-) 그런 식으로 쿼리하고 표시합니다. – ppetree