我想知道是否有人可以帮助查询选择列的一部分。
“标准数据库”列包含如下所示的数据:
CriteriaData
14 27 15 C
14 30 15 DD
14 38 15通行证
14 33 15通行证
如何只选择数字15后面显示的数据。
非常感谢。
答案 0 :(得分:5)
SELECT RIGHT(CriteriaData,
LEN(CriteriaData) - CHARINDEX('15', CriteriaData, 1) - 2)
FROM TableName
WHERE CriteriaData LIKE '%15%';
答案 1 :(得分: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
答案 2 :(得分:3)
如果CriteriaCData
总是包含由空格分隔的3个数字的2个数字的模式,那么您总是希望从第10个字符中检索:
select SUBSTR(CriteriaCData, 10) from xxx
如果你在oracle min 10.g下,那么使用REGEXP_SUBSTR来检索alpha模式
SELECT upper(REGEXP_SUBSTR(CriteriaCData, '[a-zA-Z]*$')) FROM xxx
答案 3 :(得分:1)
由于您似乎想要从第九个字符开始的所有内容,您可以使用RIGHT
和LEN
SELECT right([CriteriaData], len([CriteriaData]) - 9)
但是,您最好将数据标准化,因此它已经处于单独的列中。
答案 4 :(得分:1)
在oracle上使用LENGTH而不是LEN
SELECT substr(CriteriaData, 8, LENGTH(CriteriaData) - 9) from table
答案 5 :(得分:0)
SELECT substring(criteriadata, 9, LEN(criteriadata)-8) from table
这假定15的位置是固定的。
答案 6 :(得分:0)
您应该使用带左函数的子字符串
看看这个:How to extract this specific substring in SQL Server?
而且:http://msdn.microsoft.com/en-us/library/aa259342(v=sql.80).aspx
答案 7 :(得分:0)
SELECT
RIGHT(CriteriaData, LEN(CriteriaData) - (CHARINDEX('15', CriteriaData, 1) - 2))
FROM
MyTable;
答案 8 :(得分:0)
Declare @x nvarchar(100) = '14 30 15 DD';
Select substring(@x, (select charindex('15',@x,1) + 2) ,len(@x));
答案 9 :(得分: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
答案 10 :(得分: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;