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

悲しいことに、ここでは 2 つの結果が得られます。「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 文字が指定された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 に答える