0

問題

次のようなファイル キーを格納するフィールドがあります。

dev/application/document_type_name/document 12345-67890_123.pdf

値が次のようになるように、最後に数字のないキーを選択する必要があります。

dev/application/document_type_name/document 12345-67890_.pdf

潜在的な戦略

私がT-SQLをやってからしばらく経ちましたが、.NET側から来て、一般的な戦略は次のようになると思います:

  • アンダースコア文字の最後のインデックスを取得する
  • ピリオド文字の最後のインデックスを取得します。
  • これらの 2 文字の間の値をブランクに置き換えます。

C# では、次のようになると思います。

var test = "dev/application/document_type_name/document 12345-67890_123.pdf"
var indexOfUnderscore = test.LastIndexOf("_");
var indexOfPeriod = test.LastIndexOf(".");
var textToReplace = subtring(indexOfUnderscore + 1, indexOfPeriod -1);
var output = test.Replace(textToReplace, String.Empty);

ノート:

  • すべてのキーにはその形式があります
  • アンダースコアとピリオドの間の値の長さは異なる場合があります (1、12345 など)。
  • 最終結果はアンダースコアとピリオドを保持する必要があります
4

1 に答える 1

6

試す

select left(@s,len(@s)-charindex('_',REVERSE(@s)))+'_.pdf'

あなたの文字列はどこ@sですか。または、ファイル拡張子が変更される可能性がある場合

select left(@s,len(@s)-charindex('_',REVERSE(@s))+1) 
     + right(@s,charindex('.',REVERSE(@s)))
于 2013-09-19T20:33:22.630 に答える