รับรายการ SQLite มูลค่า 12 ชั่วโมงล่าสุด

ฉันกำลังพยายามรับรายการในช่วง 12 ชั่วโมงที่ผ่านมาจาก SQLite db พร้อม android

ฉันสงสัยว่าสิ่งนี้เป็นไปได้หรือไม่?

รูปแบบวันที่ของฉันคือ "yyyy-MM-dd HH:mm:ss.SSS" โดยใช้รูปแบบวันที่แบบง่าย

ฉันมีคอลัมน์ CREATED_AT ในตารางซึ่งเป็นประเภท TEXT

ฉันมาไกลขนาดนี้:

SELECT * FROM " + ENTRIES_TABLE + " WHERE " + CREATED_AT + ..."

นอกจากนี้ เป็นเรื่องสำคัญหรือไม่ที่คอลัมน์ CREATED_AT จะเป็น TEXT แทนที่จะเป็นประเภทวันที่และเวลา

ขอบคุณ


person Community    schedule 30.04.2014    source แหล่งที่มา
comment
หากสตริงของคุณตรงกันก็ไม่สำคัญว่าคุณกำลังทำ = แต่โค้ดของคุณอธิบายสิ่งนี้ไม่ถูกต้อง แม้จะไม่ใช่ความคิดที่ดีก็ตาม จะเกิดอะไรขึ้นถ้าคุณต้องการทำ less than หรือ between   -  person Scary Wombat    schedule 30.04.2014
comment
คุณควรพิจารณาการจัดเก็บ CREATED_AT เป็นการประทับเวลา UNIX โดยใช้ sqlite INTEGER แทนที่จะเป็น STRING คุณจะอ่านค่าในโค้ดของคุณโดยใช้ตัวแปรแบบยาว สิ่งนี้ไม่ได้ตอบคำถามของคุณโดยตรง แต่จะช่วยในการเปรียบเทียบในอนาคต   -  person ugo    schedule 30.04.2014
comment
คุณควรพิจารณาการยอมรับคำตอบสำหรับคำถามที่ผ่านมาของคุณด้วย   -  person ugo    schedule 30.04.2014
comment
ที่เกี่ยวข้อง: stackoverflow.com/a/13694823/544198   -  person PearsonArtPhoto    schedule 30.04.2014


คำตอบ (2)


SQLite ใช้การพิมพ์แบบไดนามิก; ไม่สำคัญว่าคอลัมน์จะถูกประกาศเป็น TEXT หรือ DATETIME หรือ FLUFFY BUNNIES

รูปแบบวันที่ของ SQLite ได้รับการออกแบบเพื่อให้การเปรียบเทียบสตริงทำงานได้อย่างถูกต้อง หากต้องการลบ 12 ชั่วโมงจากการประทับเวลา ให้ใช้ฟังก์ชันวันที่ในตัว:

SELECT *
FROM Entries
WHERE CreatedAt >= datetime('now', '-12 hours')

(ฟังก์ชันวันที่ของ SQLite จะใช้ UTC ตามค่าเริ่มต้น ตรวจสอบว่าค่าของตารางไม่ได้ใช้เขตเวลาท้องถิ่นบางแห่ง)

person CL.    schedule 30.04.2014

เนื่องจากเป็นช่องข้อความ คุณไม่สามารถทำอะไรได้มากมาย ในความเป็นจริง ตัวเลือกเดียวของคุณที่ใช้งานได้ตลอดเวลาโดยไม่ต้องยุ่งยากมากนักคือแยกวิเคราะห์ข้อมูลและดำเนินการด้วยตนเอง เส้นทางที่เจ็บปวดจะพิจารณาการเปรียบเทียบสตริงโดยตรง แต่จะซับซ้อนหากคุณต้องเผชิญ เช่น วันที่ 1 มกราคม ก่อนเที่ยง

วิธีที่ดีกว่ามากและวิธีที่ดีที่สุดในการจัดการกับวันที่ใน sqlite คือการใช้การประทับเวลา Unix เป็นเรื่องง่ายในการเลือกอะไรก็ได้ที่มีแท็กเวลามากกว่าเวลาปัจจุบันลบ 12 ชั่วโมง เท่านี้ก็เรียบร้อย

person PearsonArtPhoto    schedule 30.04.2014