2

I'm filling my ASP.NET dropdownlist from a column (nvarchar) in my SQL Server database.

Is there any way that I can bring rows containing a keyword to the beginnning of my returned result set?

For instance I have these records in my table:

abc
abc1
abcd2
abcXYZ3
adfdf3XYZ
abcd5

I want to have rows containg XYZ at the top of my dropdownlist, i.e:

abcXYZ3
adfdf3XYZ
abc
abc1
abcd2
abcd5

Is it possible to create a SQL query for this purpose, for instance something like this:

select * 
from myTable 
order by (mycolumn LIKE '%XYZ%')

How can I get my desired result? If it is not possible in SQL Server, how can I do it in my C# code?

4

4 に答える 4

8

SQLでそれを行うには、使用できます

SELECT *
FROM   myTable
ORDER  BY CASE
            WHEN mycolumn LIKE '%XYZ%' THEN 0
            ELSE 1
          END,
          mycolumn 
于 2012-10-19T12:18:44.123 に答える
2

出現回数で並べ替えることができます。

SELECT column,
       len(column) - len(replace(column,@text,'')) AS MatchNumber

FROM   table

ORDER BY len(column) - len(replace(column,@text,''))

これには、一致が発生した回数で並べ替えるという利点がありますが、より多くの一致がある長い文字列に偏っています。

于 2012-10-19T12:22:09.063 に答える
1

分割して、最初にキーワードを含むアイテムを追加し、次に他のアイテムを追加します。

于 2012-10-19T12:20:15.783 に答える
0

--Oracle11gの場合

select myField
  from myTable
order by instr(myField, 'XYZ') desc
于 2012-10-19T12:40:14.737 に答える