2

我想知道是否有人可以帮助查询以选择列的一部分。

“criteriadata”列包含如下所示的数据:

标准数据

14 27 15 ℃

14 30 15 日

14 38 15 通过

14 33 15 通过

如何仅选择出现在数字 15 之后的数据。

非常感谢。

4

11 回答 11

5
SELECT RIGHT(CriteriaData, 
             LEN(CriteriaData) - CHARINDEX('15', CriteriaData, 1) - 2)
FROM TableName
WHERE CriteriaData LIKE '%15%';

SQL 小提琴演示

于 2012-11-06T14:50:25.453 回答
3
declare @T table
(
  CriteriaData varchar(20)
)

insert into @T values
('14 27 15 C'),
('14 30 15 DD'),
('14 38 15 Pass'),
('14 33 15 Pass')

select stuff(CriteriaData, 1, 3+charindex(' 15 ', CriteriaData), '')
from @T  

结果:

---------
C
DD
Pass
Pass
于 2012-11-06T14:54:21.793 回答
3

如果CriteriaCData始终包含由空格分隔的 2 个数字的 3 个数字的模式,那么您总是希望从第 10 个字符中检索:

select SUBSTR(CriteriaCData, 10) from xxx

如果您在 oracle min 10.g 下,则使用 REGEXP_SUBSTR 检索 alpha 模式

SELECT upper(REGEXP_SUBSTR(CriteriaCData, '[a-zA-Z]*$')) FROM xxx
于 2012-11-06T14:56:10.807 回答
1

由于您似乎想要从第九个字符开始的所有内容,您可以使用RIGHTLEN

SELECT right([CriteriaData], len([CriteriaData]) - 9)

但是,您最好对数据进行规范化,以便它已经在单独的列中。

于 2012-11-06T15:02:24.050 回答
1

在 oracle 上使用 LENGTH 而不是 LEN

SELECT substr(CriteriaData, 8, LENGTH(CriteriaData) - 9) from table
于 2014-01-03T13:47:03.767 回答
0

SELECT substring(criteriadata, 9, LEN(criteriadata)-8) from table

这假设 15 的位置是固定的。

于 2012-11-06T14:49:10.250 回答
0

您应该使用带有左函数的子字符串

看看这个:How to extract this specific substring in SQL Server?

这: http: //msdn.microsoft.com/en-us/library/aa259342 (v=sql.80).aspx

于 2012-11-06T14:51:20.420 回答
0
SELECT 
  RIGHT(CriteriaData, LEN(CriteriaData) - (CHARINDEX('15', CriteriaData, 1) - 2)) 
FROM 
  MyTable;
于 2012-11-06T14:51:50.730 回答
0
Declare @x nvarchar(100) = '14 30 15 DD';    
Select substring(@x, (select charindex('15',@x,1) + 2) ,len(@x));
于 2012-11-06T15:02:14.507 回答
0

我创建了一个 SQL 函数来按空格分割条件,并使用最后一个空格之后的最后一个剩余值。

create function dbo.getCriteria
(
    @criteria varchar(500)
) 
returns varchar(500)
begin
    declare @space as int
    select @space=charindex(' ', data) from mydata
    while @space > 0
    begin
        set @criteria=substring(@criteria, @space + 1, len(@criteria))
        select @space=charindex(' ', @criteria)
    end
    return @criteria
end

select dbo.getCriteria(data) from mydata
于 2012-11-06T15:03:10.137 回答
0

由于我无法使之前的答案发挥作用,我不得不找到自己的数字以供将来参考,我将其留在 Stack Overflow 上。我的字段有 XML,但它是一个 NVarchar 字段,应该可以很好地概括 - 如果您对左右周围的字符串有明确的标准。

这不是这个问题的完全匹配,但我希望它可以帮助那些在他们的列中有大量字符串并且需要剪掉一个在其他两个字符串之间变化的字符串的人!

WITH r
 AS (
 SELECT TOP 100 RIGHT(XMLData, LEN(XMLData)-CHARINDEX('<INVOICE_NO>', XMLData)-11) AS xmldata
 FROM IncomingPartsInvoiceXML)
 SELECT LEFT(xmldata, CHARINDEX('<\/INVOICE_NO>', XMLData)-1)
 FROM r;
于 2019-02-12T11:15:37.090 回答