1

我对如何完成这件事有点困惑。我有一个具有这些值的数据库表:

| 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 子句会导致这种情况发生。有没有更好的方法让我得到我想要的结果?

非常感谢您提前。

4

3 回答 3

2

您可能想SUBSTRING改用(假设 T-SQL):

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

它检查第一个 n-chars 是否FileName等于给定的code.

演示

于 2013-03-06T14:50:39.287 回答
0

SET @FileName = '1-SO1234567890.pdf'

SELECT * 
FROM   tbl_FileTypes 
WHERE  CHARINDEX(code,@FileName) = 1

在这种情况下可以工作,但如果你有一个代码“1-SOS”,它会再次失败。

于 2013-03-06T14:53:06.263 回答
0

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

SELECT TOP (1) * 
FROM   tbl_FileTypes 
WHERE  LEFT(@FileName,LEN(code)) = code
--ORDER BY yourCol
于 2013-03-06T14:57:56.850 回答