0

“Route”表中有一个“AppendedData”列。它以这种格式存储数据

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

我想要的是在 where 子句中通过将其拆分/子串分成两部分来编写一个搜索查询。“:”之前的部分用于匹配值。

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

我一直在 sql server 中尝试这个,直到现在它返回第二部分,即在“:”之后。

我的查询:

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

2 回答 2

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] });
于 2012-10-24T09:53:24.967 回答
0

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

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

它会将您的行与 ID 2 匹配。

于 2012-10-24T09:43:52.787 回答