选择部分列

问题描述 投票:2回答:11

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

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

CriteriaData

14 27 15 C.

14 30 15 DD

14 38 15通行证

14 33 15通行证

如何仅选择数字15后面显示的数据。

非常感谢。

sql sql-server sql-server-2005
11个回答
5
投票
SELECT RIGHT(CriteriaData, 
             LEN(CriteriaData) - CHARINDEX('15', CriteriaData, 1) - 2)
FROM TableName
WHERE CriteriaData LIKE '%15%';

SQL Fiddle Demo


0
投票
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

0
投票

由于我无法使先前的答案工作,我必须找到自己的,并为未来的参考数字我将它留在Stack Overflow上。我的字段有XML但它是一个NVarchar字段,如果你对左右边界字符串有一个明确的标准,那么它应该很好地概括。

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

SELECT 
  RIGHT(CriteriaData, LEN(CriteriaData) - (CHARINDEX('15', CriteriaData, 1) - 2)) 
FROM 
  MyTable;

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

3
投票

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

CriteriaCData

如果你在oracle min 10.g下,那么使用REGEXP_SUBSTR来检索alpha模式

select SUBSTR(CriteriaCData, 10) from xxx

1
投票

因为你似乎想要从第九个字符开始的所有东西,你可以使用SELECT upper(REGEXP_SUBSTR(CriteriaCData, '[a-zA-Z]*$')) FROM xxx RIGHT

LEN

但是,您最好将数据标准化,因此它已经处于单独的列中。


1
投票

在oracle上使用LENGTH而不是LEN

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

0
投票

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

看看这个:SELECT substr(CriteriaData, 8, LENGTH(CriteriaData) - 9) from table

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


0
投票

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

0
投票

我创建了一个SQL函数分裂由空间的条件,且最后空间后最后使用的剩余价值。

Declare @x nvarchar(100) = '14 30 15 DD';    
Select substring(@x, (select charindex('15',@x,1) + 2) ,len(@x));
© www.soinside.com 2019 - 2024. All rights reserved.