2012-10-24 28 views
0

“Route”表中有一列“AppendedData”。它存储在这种格式C#中sql服务器的拆分列值

------------- 
ID | AppendedData 
1 | abc : xyz 
2 | 123a : gvk 
-------------- 

数据我想是写在这个“AppendedData”的搜索查询,其中通过劈裂条款/两个部分串吧。 “:”之前的部分用于匹配值。

我工作的当前应用程序是旧的,所以我不能去写一个存储过程。所以我剩下的就是在c#中写查询并执行它并返回一个datable。那么我怎么能在c#中做到这一点?

我正在尝试这个在sql服务器,直到现在它返回第二部分,即“:”后。

我的查询:

select SUBSTRING(AppendedData,CHARINDEX(':',AppendedData)+1, 100) from route 
+0

为什么你需要在C#中吗?你想得到什么结果? –

+0

'AppendedData'可以包含多个':'吗? –

+0

@tim否将只有一个“:” – ankur

回答

1

试试这个,

SQL

declare @route TABLE 
( 
    [ID] [int] NOT NULL, 
    [AppendedData] varchar (50) NOT NULL 
) 

insert into @route values (1, 'abc : xyz') 
insert into @route values (2, '123a : gvk') 

select SUBSTRING(AppendedData,CHARINDEX(':',AppendedData)+1, 100) from @route where    SUBSTRING(AppendedData,1, CHARINDEX(':', AppendedData)-1) = '123a' 

C#

var lstRoutes = new List<Route> 
{ 
    new Route {ID = 1, AppendedData = "abc : xyz"}, 
    new Route {ID = 2, AppendedData = "123a : gvk"}, 
            }; 
var result = lstRoutes.Where(r1 => r1.AppendedData.Split(':')[0].Trim() == "abc") 
      .Select(r => new { r.ID, right = r.AppendedData.Split(':')[1] }); 
+0

感谢prasad,它在Sql服务器中运行良好,让我们看看它是否也适用于C#。 – ankur

0

如果要值的第一部分相匹配,你可以尝试这样的事情

SELECT * FROM Route WHERE AppendData LIKE '123a :%' 

,它会用ID 2.

符合您行
+0

但是,如果该值为“123aa:123a:123b”而不是?第二个标记应匹配,如果他搜索“123a”,也许已经是第一个(取决于要求:包含或等于)。您的查询不会找到任何。 –

+0

这取决于值的形式。这个“之前的部分:将用于匹配值”。听起来像只有一个:分隔符。 – mboldt