SQL LIKE(反向)

时间:2013-03-06 14:40:19

标签: sql

我对如何做到这一点感到困惑。 我有一个具有以下值的数据库表:

| id |  file_type | code | position |
-------------------------------------
| 1  |    Order   |  SO  |   1      |
| 2  |    Order   | 1-SO |   7      |
| 3  |    Order   | 1_SO |   7      |

现在,我想获取文件名的位置和文件类型,以便我提出这个查询:

SET @FileName = '1-SO1234567890.pdf'

SELECT * 
FROM   tbl_FileTypes 
WHERE  CHARINDEX(code,@FileName)> 0

可悲的是,我在这里得到两个结果,我只需要带有“1-SO”结果的数据。

| id |  file_type | code | position |
-------------------------------------
| 1  |    Order   |  SO  |   1      |
| 2  |    Order   | 1-SO |   7      |

我相信我的WHERE Clause会导致这种情况发生。 有没有更好的方法来获得我想要的结果?

非常感谢你。

3 个答案:

答案 0 :(得分:2)

您可能希望使用SUBSTRING代替(假设为T-SQL):

WHERE code = SUBSTRING(@FileName,1, LEN(code));

检查FileName的前n个字符是否等于给定的code

DEMO

答案 1 :(得分:0)

以及

SET @FileName = '1-SO1234567890.pdf'

SELECT * 
FROM   tbl_FileTypes 
WHERE  CHARINDEX(code,@FileName) = 1
在这种情况下,

会起作用,但如果你有一个代码&1; SOS'它会再次失败。

答案 2 :(得分:0)

由于您是cheking left most characters,您还可以使用LEFT()功能,如下所示。还可以使用TOP (1)获取单个记录,并根据需要考虑订购。

SELECT TOP (1) * 
FROM   tbl_FileTypes 
WHERE  LEFT(@FileName,LEN(code)) = code
--ORDER BY yourCol