Эта библиотека синтаксического анализа веса должна решить все подобные проблемы. Мне нравится библиотека, потому что ее довольно легко расширить.
Пример синтаксического анализа:
var caseOne = Date.parseDate("Jul 8, 2005", "M d, Y");
var caseTwo = Date.parseDate("2005-07-08", "Y-m-d");
И форматирование обратно в строку (вы заметите, что оба случая дают точно такой же результат):
console.log( caseOne.dateFormat("M d, Y") );
console.log( caseTwo.dateFormat("M d, Y") );
console.log( caseOne.dateFormat("Y-m-d") );
console.log( caseTwo.dateFormat("Y-m-d") );
Можно использовать the Row_Number()
функция. Его используемый следующим образом:
SELECT Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
FROM Users
, От которого это приведет к набору результатов с RowID
поле, между которым можно использовать для страницы.
SELECT *
FROM
( SELECT Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
FROM Users
) As RowResults
WHERE RowID Between 5 AND 10
и т.д.
При попытке попасть в точку оператор (общее количество плюс подкачка страниц). Вы, возможно, должны были бы исследовать поддержку SQL Server для раздела пунктом (функции работы с окнами в терминах ANSI SQL). В Oracle синтаксис точно так же, как пример выше использования row_number (), но я также добавил раздел пунктом для получения общего количества строк, включенных с каждой строкой, возвращенной в подкачке страниц (строки итогов 1,262):
SELECT rn, total_rows, x.OWNER, x.object_name, x.object_type
FROM (SELECT COUNT (*) OVER (PARTITION BY owner) AS TOTAL_ROWS,
ROW_NUMBER () OVER (ORDER BY 1) AS rn, uo.*
FROM all_objects uo
WHERE owner = 'CSEIS') x
WHERE rn BETWEEN 6 AND 10
Примечание, которое я имею, где владелец = 'CSEIS' и мой раздел находятся на владельце. Таким образом, результаты:
RN TOTAL_ROWS OWNER OBJECT_NAME OBJECT_TYPE
6 1262 CSEIS CG$BDS_MODIFICATION_TYPES TRIGGER
7 1262 CSEIS CG$AUS_MODIFICATION_TYPES TRIGGER
8 1262 CSEIS CG$BDR_MODIFICATION_TYPES TRIGGER
9 1262 CSEIS CG$ADS_MODIFICATION_TYPES TRIGGER
10 1262 CSEIS CG$BIS_LANGUAGES TRIGGER
Когда я должен сделать подкачку страниц, я обычно использую временную таблицу также. Можно использовать выходной параметр для возврата общего количества записей. Операторы выбора в выборе позволяют Вам сортировать данные по определенным столбцам, не будучи должен обратиться к динамическому SQL.
--Declaration--
--Variables
@StartIndex INT,
@PageSize INT,
@SortColumn VARCHAR(50),
@SortDirection CHAR(3),
@Results INT OUTPUT
--Statements--
SELECT @Results = COUNT(ID) FROM Customers
WHERE FirstName LIKE '%a%'
SET @StartIndex = @StartIndex - 1 --Either do this here or in code, but be consistent
CREATE TABLE #Page(ROW INT IDENTITY(1,1) NOT NULL, id INT, sorting_1 SQL_VARIANT, sorting_2 SQL_VARIANT)
INSERT INTO #Page(ID, sorting_1, sorting_2)
SELECT TOP (@StartIndex + @PageSize)
ID,
CASE
WHEN @SortColumn='FirstName' AND @SortDirection='ASC' THEN CAST(FirstName AS SQL_VARIANT)
WHEN @SortColumn='LastName' AND @SortDirection='ASC' THEN CAST(LastName AS SQL_VARIANT)
ELSE NULL
END AS sort_1,
CASE
WHEN @SortColumn='FirstName' AND @SortDirection='DES' THEN CAST(FirstName AS SQL_VARIANT)
WHEN @SortColumn='LastName' AND @SortDirection='DES' THEN CAST(LastName AS SQL_VARIANT)
ELSE NULL
END AS sort_2
FROM (
SELECT
CustomerId AS ID,
FirstName,
LastName
FROM Customers
WHERE
FirstName LIKE '%a%'
) C
ORDER BY sort_1 ASC, sort_2 DESC, ID ASC;
SELECT
ID,
Customers.FirstName,
Customers.LastName
FROM #Page
INNER JOIN Customers ON
ID = Customers.CustomerId
WHERE ROW > @StartIndex AND ROW <= (@StartIndex + @PageSize)
ORDER BY ROW ASC
DROP TABLE #Page
Я полагаю, что необходимо было бы выполнить отдельный запрос для выполнения этого unfortionately.
я смог выполнить это в своем предыдущем положении с помощью некоторой справки от этой страницы: Подкачка страниц в DotNet 2.0
у Них также есть он вытягивающий количество строки отдельно.
Вот то, что я делаю для подкачки страниц: Все мои большие запросы, которые должны быть разбиты на страницы, кодируются, как вставляет во временную таблицу. Временная таблица имеет поле идентификационных данных, которое будет действовать подобным образом к row_number () упомянутый выше. Я храню количество строк во временной таблице в выходном параметре, таким образом, код вызова знает, сколько там общие записи. Код вызова также определяет, какую страницу он хочет, и сколько строк на страницу, которые выбраны из временной таблицы.
прохладная вещь о выполнении его этот путь состоит в том, что у меня также есть ссылка "Экспорта", которая позволяет Вам получать все строки из отчета, возвращенного как CSV выше каждой сетки в моем приложении. Эта ссылка использует ту же хранимую процедуру: Вы просто возвращаете содержание временной таблицы вместо того, чтобы делать логику подкачки страниц. Это умиротворяет пользователей, которые ненавидят подкачку страниц и хотят видеть все и хотеть отсортировать ее миллионом различных способов.
Принятый ответ на этот вопрос на самом деле не работает для меня ... Мне пришлось прыгнуть еще один обруч, чтобы заставить его работать.
Когда я попробовал ответ
SELECT Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
FROM Users
WHERE RowID Between 0 AND 9
, он потерпел неудачу, пожаловавшись, что не знает, что такое RowID.
Я должен был обернуть его во внутренний выбор, например, так:
SELECT *
FROM
(SELECT
Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
FROM Users
) innerSelect
WHERE RowID Between 0 AND 9
, а затем это сработало.