簡體   English   中英

WebSQL / SQLite按JavaScript日期obj排序

[英]WebSQL/SQLite order by javascript date obj

我正在研究html5 / jqm / phonegap應用程序。 我正在從客戶端數據庫表中選擇記錄列表。 我想按日期對它們進行分組和排序,但是表中存在的日期是一個JS日期對象,例如:

Mon Nov 19 2012 16:20:55 GMT+0000 (GMT)

我想按數字天(在此示例中為18、19、20)對它們進行分組和排序。 因此,以下詳細信息:

Sun Nov 18 2012 16:20:55 GMT+0000 (GMT)
Mon Nov 19 2012 16:20:55 GMT+0000 (GMT)
Sun Nov 18 2012 16:20:55 GMT+0000 (GMT)
Tue Nov 12 2012 16:20:55 GMT+0000 (GMT)

將按以下順序返回:

Tue Nov 20 2012 16:20:55 GMT+0000 (GMT)
Mon Nov 19 2012 16:20:55 GMT+0000 (GMT)
Sun Nov 18 2012 16:20:55 GMT+0000 (GMT)
Sun Nov 18 2012 16:20:55 GMT+0000 (GMT)

作為選擇的一部分,是否可以在sql中執行此操作? 或者,如果不能,那么有人會朝着正確的方向指點我,說明如何在Js / jQuery中做到這一點?

提前致謝

**根據彼得的問題進行編輯**

我正在使用Jaascript / html5客戶端版本的SQL,我相信它基於SQLite。 要創建數據庫,我只是調用以下js-

var db = openDatabase(shortName, version, displayName, maxSize);

我的Db模式是:

transaction.executeSql('CREATE TABLE RECORDINGS (id INTEGER PRIMARY KEY AUTOINCREMENT, caseRef, startDate, endDate, caseTypeId, actionTypeId, notes, userId, syncStatus);');
transaction.executeSql('INSERT INTO RECORDINGS (caseRef, startDate, endDate, caseTypeId, actionTypeId, notes, userId, syncStatus) VALUES ("CR1234", "'+startDate+'", "'+endDate+'", 1, 2, "Meeting about something", 1, 0);');

我的選擇當前看起來像:

function getRecordingsQuery(transaction) {
        transaction.executeSql('SELECT RECORDINGS.id, RECORDINGS.caseRef, RECORDINGS.startDate, RECORDINGS.endDate, RECORDINGS.notes, RECORDINGS.syncStatus, CASETYPES.description FROM RECORDINGS, CASETYPES WHERE RECORDINGS.caseTypeId = CASETYPES.id AND RECORDINGS.userId =? ORDER BY startDate DESC', [window.currentSignedInUserId], getRecordingsDataHandler, errorHandler);
    }

有幫助嗎?

更新

SQLLite不支持DATEPART ,但是它支持strftime 嘗試將以下內容添加為您的ORDER BY

ORDER BY CAST(strftime("%d", date) AS INTEGER) DESC

您可以改為使用JavaScript處理排序。 我敢肯定有更好或更有效的方法可以做到這一點,但是您可以對數組使用內置排序,如下所示:

var getRecordingsDataHandler = function getRecordingsDataHandler(tx, results) {
    var rows = [],
        row = null,
        i = 0;
      if (results.rows && results.rows.length) {
        for (i = 0; i < results.rows.length; i += 1) {
            rows.push({
                "startDate": new Date(results.rows.item(i).startDate),
                "data": results.rows.item(i)
            });
        }
        rows.sort(function (a, b) {
            var ascending = a.startDate.getDate() - b.startDate.getDate(),
                descending = b.startDate.getDate() - a.startDate.getDate();
            return descending;
        });
        for (i = 0; i < rows.length; i += 1) {
            row = rows[i].data;
            //process the rest
            //since row === results.rows.item(i), reference from row
        }
    }
};

原版的:

如果不知道您使用的是哪個SQL版本,則很難回答問題的這一部分。 我認為其中大多數都支持DATEPART函數,因此您可以嘗試:

ORDER BY DATEPART(dd, YourDateField) DESC

至於JavaScript / jQuery:

var d = new Date('Tue Nov 20 2012 16:20:55 GMT+0000 (GMT)');

會在JavaScript中返回一個日期對象,您可以對其進行排序。 僅針對日期:

d.getDate(); //returns day of month

如果您對問題(使用的是哪種SQL引擎/版本,或客戶端表的結構以及用於對它進行排序的功能)更具體一些,那么我們可以為您提供幫助好一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM