当前位置: 首页 > 面试题库 >

拆分字符串并在mssql中返回最大

羿宏硕
2023-03-14
问题内容

我需要找到一种方法来获取具有最高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 方法。可以用来基于任何分隔符——包括正则表达式来拆分字符串。这个方法还可以接受第二个参数,用于指定返回的子字符串数

  • 我试图编写一个代码,将一个无空格的字符串拆分成有意义的单词,但当我给出“arealways”这样的句子时,它返回['a'、'real'、'ways'],我想要的是['are'、'always'],我的字典包含了所有这些单词。我怎样才能编写一个代码,一直回溯到找到最佳匹配? 返回“a”、“real”、“ways”的代码: splitter.java: Trie.java: WordSplitter类