Позвольте мне попытаться объяснить это на примере.
Рассмотрим следующий текст:
http://stackoverflow.com/
https://stackoverflow.com/questions/tagged/regex
Теперь, если я применил реджикс ниже над ним ...
(https?|ftp)://([^/\r\n]+)(/[^\r\n]*)?
... Я бы получил следующий результат:
Match "http://stackoverflow.com/"
Group 1: "http"
Group 2: "stackoverflow.com"
Group 3: "/"
Match "https://stackoverflow.com/questions/tagged/regex"
Group 1: "https"
Group 2: "stackoverflow.com"
Group 3: "/questions/tagged/regex"
Но мне не нужен протокол - мне просто нужен хост и путь к URL. Итак, я изменяю регулярное выражение, чтобы включить группу, не связанную с захватом (?:)
.
(?:https?|ftp)://([^/\r\n]+)(/[^\r\n]*)?
Теперь мой результат выглядит следующим образом:
Match "https://stackoverflow.com/"
Group 1: "stackoverflow.com"
Group 2: "/"
Match "https://stackoverflow.com/questions/tagged/regex"
Group 1: "stackoverflow.com"
Group 2: "/questions/tagged/regex"
См.? Первая группа не была захвачена.
В соответствии с запросом позвольте мне также попытаться объяснить группы.
/ g10]
Ну, группы служат многим целям. Они могут помочь вам извлечь точную информацию из большего соответствия (которое также можно назвать), они позволяют вам переименовать предыдущую сопоставленную группу и могут использоваться для замещений. Давайте попробуем несколько примеров, не так ли?
Хорошо, представьте, что у вас есть какой-то XML или HTML (имейте в виду, что regex может быть не лучшим инструментом для задания , но это неплохо в качестве примера). Вы хотите проанализировать теги, чтобы вы могли сделать что-то вроде этого (я добавил места, чтобы упростить их понимание):
\<(?.+?)\> [^<]*? \\k\>
or
\<(.+?)\> [^<]*? \\1\>
Первое регулярное выражение имеет именованную группу (TAG), в то время как второй использует общую группу. Оба регулярных выражения делают то же самое: они используют значение из первой группы (имя тега) в соответствии с закрывающим тегом. Разница в том, что первое использует имя для соответствия значению, а второе использует индекс группы (который начинается с 1).
Давайте попробуем несколько подстановок. Рассмотрим следующий текст:
Lorem ipsum dolor sit amet consectetuer feugiat fames malesuada pretium egestas.
Теперь давайте воспользуемся этим немым регулярным выражением над ним:
\b(\S)(\S)(\S)(\S*)\b
Это регулярное выражение соответствует словам не менее 3 символов и использует группы для отделите первые три буквы. В результате получится следующее:
Match "Lorem"
Group 1: "L"
Group 2: "o"
Group 3: "r"
Group 4: "em"
Match "ipsum"
Group 1: "i"
Group 2: "p"
Group 3: "s"
Group 4: "um"
...
Match "consectetuer"
Group 1: "c"
Group 2: "o"
Group 3: "n"
Group 4: "sectetuer"
...
Итак, если мы применим строку подстановки ...
$1_$3$2_$4
... над ней мы пытаемся использовать первую группу , добавьте символ подчеркивания, используйте третью группу, затем вторую группу, добавьте еще одно подчеркивание, а затем четвертую группу.
L_ro_em i_sp_um d_lo_or s_ti_ a_em_t c_no_sectetuer f_ue_giat f_ma_es m_la_esuada p_er_tium e_eg_stas.
Вы также можете использовать именованные группы для подстановок, используя ${name}
.
Чтобы играть с регулярными выражениями, я рекомендую http://regex101.com/ , в котором содержится подробная информация о том, как работает регулярное выражение; он также предлагает несколько двигателей регулярных выражений на выбор.
Ваш запрос:
SELECT timestamp
FROM randomTable
ORDER BY timestamp ASC;
является совершенным. Но я сомневаюсь в результатах, которые вы представили в своей публикации. Вы отправили:
2012-07-11 17:34:57
2012-07-11 17:33:07
2012-07-11 17:33:28
Но результаты показывают, что ваши sqlbox показывают:
2012-07-11 17:34:57
2012-07-15 17:33:07
2012-07-15 17:33:28
Что совершенно правильно.
Это ошибка опечатки в вашей публикации? Если нет, попробуйте следующее:
SELECT timestamp( `timestamp` ) as 'timestamp'
FROM randomTable
ORDER BY 1 ASC;
, если вы пишете запрос как:
select q.`timestamp`
from user_quotations as q
order by q.`timestamp`
limit 30
, вы должны правильно их упорядочить.
Если нет, возникает проблема с данными временной метки. Ищите ведущие / конечные пробелы, нечетные символы и т. Д.
Проверьте инструкцию create для таблицы. Я ожидаю, что ваш столбец timestamp действительно является строкой.
Show create table tablename;
Снимок экрана показывает два результата из 15-го и один из 11-го. Вероятно, влияет на порядок бит.