Как отменить выбор sql [дубликат]

Позвольте мне попытаться объяснить это на примере.

Рассмотрим следующий текст:

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 может быть не лучшим инструментом для задания , но это неплохо в качестве примера). Вы хотите проанализировать теги, чтобы вы могли сделать что-то вроде этого (я добавил места, чтобы упростить их понимание):

   \<(?.+?)\> [^<]*? \\>
or
   \<(.+?)\> [^<]*? \

Первое регулярное выражение имеет именованную группу (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/ , в котором содержится подробная информация о том, как работает регулярное выражение; он также предлагает несколько двигателей регулярных выражений на выбор.

7
задан Wesley Murch 2 March 2013 в 02:04
поделиться

4 ответа

Ваш запрос:

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;
12
ответ дан Ravinder Reddy 24 August 2018 в 08:39
поделиться

, если вы пишете запрос как:

select q.`timestamp`
from user_quotations as q
order by q.`timestamp`
limit 30

, вы должны правильно их упорядочить.

Если нет, возникает проблема с данными временной метки. Ищите ведущие / конечные пробелы, нечетные символы и т. Д.

1
ответ дан Jeremy Holovacs 24 August 2018 в 08:39
поделиться

Проверьте инструкцию create для таблицы. Я ожидаю, что ваш столбец timestamp действительно является строкой.

Show create table tablename;
4
ответ дан Ray 24 August 2018 в 08:39
поделиться

Снимок экрана показывает два результата из 15-го и один из 11-го. Вероятно, влияет на порядок бит.

1
ответ дан TheSatinKnight 24 August 2018 в 08:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: