选择顺序为IN子句的记录

Ehs*_*san 3 sql t-sql

我有

SELECT * FROM Table1 WHERE Col1 IN(4,2,6)
Run Code Online (Sandbox Code Playgroud)

我想选择并返回我在IN子句中指定的指定顺序的记录(第一个显示记录,Col1 = 4,Col1 = 2,......)

我可以用

SELECT * FROM Table1 WHERE Col1 = 4
UNION ALL
SELECT * FROM Table1 WHERE Col1 = 6 , .....
Run Code Online (Sandbox Code Playgroud)

但我不想使用它,因为我想将它用作存储过程而不是自动生成.

小智 17

我知道这有点晚了,但最好的办法是

SELECT *
FROM   Table1
WHERE  Col1 IN( 4, 2, 6 )
ORDER  BY CHARINDEX(CAST(Col1 AS VARCHAR), '4,2,67')
Run Code Online (Sandbox Code Playgroud)

要么

SELECT CHARINDEX(CAST(Col1 AS VARCHAR), '4,2,67')s_order,
       *
FROM   Table1
WHERE  Col1 IN( 4, 2, 6 )
ORDER  BY s_order
Run Code Online (Sandbox Code Playgroud)

  • 如果id子字符串出现在干草堆中的多个地方会怎样?例如在“ 4,44,404”中找到ID 4的索引 (2认同)

Tob*_*ouw 6

你有几个选择.最简单的方法是将IN参数(它们是右边的参数)按照接收顺序放在一个单独的表中,然后按ORDER BY放置该表.