【问题标题】:SQL server - How to find the highest number in '<> ' in a text column?SQL server - 如何在文本列中找到“<>”中的最高数字?
【发布时间】:2013-09-16 12:01:46
【问题描述】:

假设我在 Employee 表中有以下数据:(仅此而已)

  ID   FirstName   LastName         x
    -------------------------------------------------------------------
    20   John        Mackenzie          <A>te</A><b>wq</b><a>342</a><d>rt21</d>
    21   Ted         Green              <A>re</A><b>es</b><1>t34w</1><4>65z</4>
    22   Marcy       Nate               <A>ds</A><b>tf</b><3>fv 34</3><6>65aa</6>

我需要在 X 列中搜索并在 这些括号中获得最高数字

什么样的SELECT statement可以得到我,例如,像中的数字6,在x列?

【问题讨论】:

  • 您的要求是固定的,就像您每次都需要 的记录一样,还是您正在寻求更通用的东西?
  • 尝试将该值存储在不同的列中,这样的值很难处理。
  • 如果您无法解决将所有这些数字嵌入在一列中的字符串中的问题,您可能希望使用RegEx 搜索模式并从中选择最大值,不幸的是 SqlServer 似乎没有对此有本机支持。您需要写一个CLR-Function,如此处所述stackoverflow.com/a/8928436/2186023
  • @AshutoshArya 感谢您的快速回复。是的,我想要一个通用的解决方案。以上只是一个例子。
  • @user2783787:你确定! x 列中的字符串只会像这样???

标签: sql sql-server-2008 select


【解决方案1】:

这种类型的查询通常用于查找模式,我认为&lt;6&gt; 位于左起第 9 个位置。

请注意,如果模式发生变化,以下查询将不起作用。

SELECT A.* FROM YOURTABLE A INNER JOIN
(SELECT TOP 1 ID,Firstname,Lastname,SUBSTRING(X,LEN(X)-9,1) AS [ORDER]
 FROM YOURTABLE
 WHERE ISNUMERIC(SUBSTRING(X,LEN(X)-9,1))=1
 ORDER BY SUBSTRING(X,LEN(X)-9,1))B
ON
A.ID=B.ID AND
A.FIRSTNAME=B.FIRSTNAME AND
A.LASTNAME=B.LASTNAME

【讨论】:

  • 只检查某个索引处的字符太具体了。
  • 您似乎只检查一位数字,如果&lt;&gt; 之间有一个多于一位数字的数字怎么办?
  • 对于原生 T-SQL 而言,要求听起来太复杂,无法在不到 100 行代码中处理......
猜你喜欢
  • 2010-12-05
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 2011-01-06
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
相关资源
最近更新 更多