0

テーブル (テーブル名: KYC_Path) の列 (列名: パス) に非常に大きなテキスト文字列があります。テーブルには基本的に、特定の番号 (ファイル番号) を抽出する必要がある画像パスの非常に大きなテキスト文字列が含まれています。テキスト文字列は次のようになります。

F:\Original\15561 done\sohan1 15561\output_after_name_mapping\01710043429(1).jpg

T:\ALL BACKUP\BACK UP 1TB(SERVER)\ALL SCANNED FILES(sohan)\01832876657 (1).JPG

T:\ALL BACKUP\form 2TB パスポート HDD\All backup\Afren\24313\24313 Nupur_1box 651\output_after_name_mapping\01918082763(1).jpg

T:\ALL BACKUP\zaman all scan\16830 noboni1 box548\output_after_name_mapping\01823152145(1).jpg

新しい列が次のようになるように、次の番号 ((1).jpg 部分を除いたファイル名) だけを収集する必要があります。

01710043429

01832876657

01918082763

01823152145

次の式を使用する方法をすでに考案しました。

select (right ([path],18)) as 'wallet_path', [path] into KYCPathNew
from [dbo].[KYCPath]


select (left ([wallet_path],11)) as 'wallet_path_new', [path] into KYCPathNew2
from [dbo].[KYCPathNew]

ただし、一部の行では、数字 (01823152145) とファイル拡張子 ((1).jpg) の間のスペースが原因でファイル名が正しく表示されないという問題が発生します。また、ファイル名の 1 ~ 2 文字が欠落しています。

すべてのファイル名をより効率的に収集できる他の方法はありますか? SQL Server に最後のバック スラッシュを検出させ、そこから 11 桁を取得させることはできますか? どのように?

4

1 に答える 1

1

次のクエリを試してください。

SELECT 
    CASE WHEN CHARINDEX('(', [Path])>0 
        THEN LEFT([Path], CHARINDEX('(', [Path])-1) 
    ELSE [Path] END [Path]
FROM(
    SELECT 
        CASE WHEN CHARINDEX('\', [Path])>0 THEN
            REPLACE(RIGHT([Path], CHARINDEX('\', REVERSE([Path])) - 1), '.jpg', '') 
        ELSE [Path] END [Path]
    FROM 
        KYC_Path
)x
于 2013-10-02T09:10:17.290 に答える