我需要找到一种方法来获取具有最高versionNumber的数据。
这是我的数据库设计:
VERSIONNUMBER - varchar(15)
DOWNLOADPATH - varchar(100)
可以说我有以下记录:
VERSIONNUMBER -------- DOWNLOADPATH
1.1.2 a.com
1.1.3 b.com
2.1.4 c.com
2.1.5 d.com
2.2.1 e.com
我需要获取版本号为2.2.1的记录。需要一些帮助的SQL :)
感谢您的任何帮助
试试这个:
with a as
(
select * from (values
('1.1.2'),('1.1.3'),('2.1.4 '), ('2.1.5'), ('2.2.1') ) as b(c)
)
select c, PARSENAME(c,1),PARSENAME(c,2), PARSENAME(c,3)
from a
order by
convert(int,PARSENAME(c,3)),
convert(int,PARSENAME(c,2)),
convert(int,PARSENAME(c,1))
灵感来自:http :
//www.sql-server-helper.com/tips/sort-ip-address.aspx
with a as
(
select * from (values
('1.1.2'),('1.1.3'),('2.1.4 '), ('2.1.5'), ('2.2.1') ) as b(c)
),
x as
(
select c,
convert(int,PARSENAME(c,3)) * 100
+ convert(int,PARSENAME(c,2)) * 10
+ convert(int,PARSENAME(c,1)) * 1 as the_value
from a
)
select c from x where the_value = (select MAX(the_value) from x)
在软件开发中,通常会找到一个包含两个数字的次要版本号,该版本号与该数字的值没有任何关系,因此版本1.12大于1.5;否则,版本号不大于1.5。为了弥补这一点,您必须适当
填充 数字:
-- Use this, the query above is not future-proof :-)
with a as
(
select * from (values
('2.1.4 '), ('2.1.12'), ('2.1.5'), ('2.2.1') ) as b(c)
),
x as
(
select c,
convert(int,PARSENAME(c,3)) * 100*100*100
+ convert(int,PARSENAME(c,2)) * 100*100
+ convert(int,PARSENAME(c,1)) * 100 as the_value
from a
)
select c, the_value from x
order by the_value
输出:
2.1.4 2010400
2.1.5 2010500
2.1.12 2011200
2.2.1 2020100
如果您不考虑这一点(与以下查询一样):
with a as
(
select * from (values
('2.1.4 '), ('2.1.12'), ('2.1.5'), ('2.2.1') ) as b(c)
),
x as
(
select c,
convert(int,PARSENAME(c,3)) * 100
+ convert(int,PARSENAME(c,2)) * 10
+ convert(int,PARSENAME(c,1)) * 1 as the_value
from a
)
select c, the_value from x
order by the_value;
-- KorsG's answer has a bug too
with a as
(
select * from (values
('2.1.4 '), ('2.1.12'), ('2.1.5'), ('2.2.1') ) as b(c)
),
x as
(
select c,
CAST(REPLACE(c, '.', '') AS int) as the_value
from a
)
select c, the_value from x
order by the_value
这两个查询将产生相同(不正确)的输出:
c the_value
2.1.4 214
2.1.5 215
2.2.1 221
2.1.12 222
2.2.1和2.1.12的值重叠。当您只删除点并将结果字符串直接转换为int时,也会发生这种情况。2.1.12变成212,2.2.1变成212。2.2.1大于2.1.12,不小于
eCaused by:org.apache.camel.InvalidPayloadException:没有类型为:org.apache.camel.Exchange的可用正文,但其值为:11484类型为:java.lang.String on:message:11484。原因:没有类型转换器可用于将类型:java.lang.String转换为所需的类型:org.apache.camel.exch
问题内容: 有没有一种方法可以将字符串(从特定列)拆分为n个字符,而又不打断单词,每个结果都在自己的行中? 例子: 结果: 我知道我可以用来找到最后一个空间,但是我不确定如何获取剩余的空间并将其作为行返回。 问题答案: 尝试这样的事情。可能是您可以创建以下实现的SQL函数。 输出将是这样的:
问题内容: 文件names.txt由许多名称组成,格式为: 有谁知道如何分割字符串,以便用逗号分隔各个名称? 以下代码按逗号分隔,并在名称两边加上引号,什么是转义字符以分隔出。可以在一个Split语句中完成,拆分并用逗号分隔吗? 顺便说一句,这是Project Euler问题#22的一部分。http://projecteuler.net/problem=22 问题答案: 杰里米(Jeremy)的回
本文向大家介绍MySQL查询将字符串“ Learn With Ease”拆分并返回最后一个单词?,包括了MySQL查询将字符串“ Learn With Ease”拆分并返回最后一个单词?的使用技巧和注意事项,需要的朋友参考一下 为此,您可以使用SUBSTRING_INDEX()。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出-
问题 你想拆分一个字符串。 解决方案 使用 JavaScript 字符串的 split() 方法: "foo bar baz".split " " # => [ 'foo', 'bar', 'baz' ] 讨论 String 的这个 split() 方法是标准的 JavaScript 方法。可以用来基于任何分隔符——包括正则表达式来拆分字符串。这个方法还可以接受第二个参数,用于指定返回的子字符串数
问题内容: 我想将字符串拆分为单个字符。所以我做: 但这产生了: 在其他语言(例如Ruby)中执行相同操作时,我不习惯使用第一个空字符串。它背后的逻辑是什么? 问题答案: 你为什么要用这个?使用可能会更好。 我知道一个会返回一个字符串数组,而另一个会给您一个字符数组。由于您希望分别使用每个字符,因此我假设这与您的代码无关。