Извлеките номер версии из строки и Отфильтруйте По Минимальной версии

#sql #type-conversion #postgresql-9.6

Вопрос:

У меня есть таблица базы данных, которая включает строку агента пользователя. Этот пользовательский агент включает в себя такую информацию, как тип устройства, тип браузера и, самое главное, номер версии. Большинство примеров выглядят так

 App Name/4.0.0 (iPad; iOS 12.3.1; Scale/2.00)
App Name/4.14.3 (iPad; iOS 14.0.1; Scale/2.00)
App Name/5.15.2 (iPad; iOS 10.3.3; Scale/2.00)
 

и информация, которую я хотел бы извлечь, — «4.0.0». В частности, я хотел бы получить список всех записей с минимальной версией 4.0.0

Вот что у меня есть на данный момент

 WHERE TRIM(SUBSTRING(user_agent,19,6))
 

что обнадеживающе возвращает 4.0.0, 4.14.3 и 5.15.2. Однако это строка, а не int, поэтому я не уверен, как найти минимальную версию.

  • Есть ли лучший способ извлечь этот номер версии, чем использование мной подстроки?
  • Как вы сортируете или фильтруете по номеру версии?

Комментарии:

1. Это не может быть int. Int не имеют десятичных знаков, а значения с плавающей запятой имеют только один. Это строка, представляющая различные части номера версии, поэтому вам придется извлечь отдельные части, преобразовать их в целые числа, а затем сравнить различные части, чтобы определить, какая из них самая большая. В противном случае вы можете просто ORDER BY version использовать a TOP 1 в своем SELECT , что даст вам минимальное строковое значение (которое может не всегда работать так , как вы ожидаете).

2. Кроме того, при использовании тега SQL почти всегда необходимо также добавить тег для конкретной используемой СУБД, поскольку синтаксис и функциональность различаются между ними. Вы можете прочитать это как предложение, если наведете указатель мыши на тег SQL в левом нижнем углу вашего поста и прочтете описание всплывающего тега.

3. Просто понял, что я не ответил на ваш фактический вопрос, что было лучшим способом извлечь этот номер версии . Ответ на этот вопрос будет зависеть от конкретной используемой вами СУБД, для которой вы не указали тег, поэтому ответить на него будет сложно.

4. Отметьте свой вопрос в базе данных, которую вы используете.