我对如何做到这一点感到困惑。 我有一个具有以下值的数据库表:
| 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会导致这种情况发生。 有没有更好的方法来获得我想要的结果?
非常感谢你。
答案 0 :(得分:2)
您可能希望使用SUBSTRING
代替(假设为T-SQL):
WHERE code = SUBSTRING(@FileName,1, LEN(code));
检查FileName
的前n个字符是否等于给定的code
。
答案 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