2017-10-06 57 views
1

用以下方法掙扎。 下面是一個屏幕截圖,當我運行下面的查詢 - 外地文件的SUBSTRING查詢更新

select [Journal Source], [File], filepath from xIntegration..FinanceIntegration WHERE FilePath like '%rent debit%' 

enter image description here

我所要做的是更新期刊源與_(下劃線)之前的第一個數字。

問題當我運行下面的代碼時,它將所有行的日誌源設置爲9,而不僅僅是我期望的位置。

我會想到的是,前4行會更改爲8,其餘變化到9

--UPDATE THE BATCH NUMBER (Journal Source) For Rent Debit File 
DECLARE @filenameRentDebit as varchar(100) 
SELECT @filenameRentDebit = [File] FROM FinanceIntegration WHERE FilePath like '%rent debit%' 

DECLARE @indexRentDebit INT 
set @indexRentDebit = CHARINDEX('_', @filenameRentDebit) 

UPDATE FinanceIntegration 
SET [Journal Source] = SUBSTRING(@filenameRentDebit, 0, @indexRentDebit) 
WHERE FilePath like '%rent debit%' 

我在做什麼愚蠢的錯誤?謝謝

+0

這看起來像SQL Server,所以我添加了標籤。 –

回答

2

正確的想法,除了使用變量。你想要:

UPDATE FinanceIntegration 
    SET [Journal Source] = SUBSTRING([File], 0, CHARINDEX('_', [File])) 
    WHERE FilePath like '%rent debit%'; 

一個變量有一個單一的值,來自表的任意一行。

+0

也可以使用'LEFT([File],CHARINDEX('_',[File]) - 1)',因爲他想要的值總是在左邊。 – Zack

+0

非常感謝你!當然,一個變量只能保存一個值:/ – ikilledbill

0

我會用SUBSTRINGCHARINDEXCAST組合更新:

UPDATE xIntegration..FinanceIntegration 
SET [Journal Source] = CAST(SUBSTRING([File], 1, CHARINDEX('_', [File]) - 1) as INT) 
WHERE FilePath like '%rent debit%' 

說明:

  • CHARINDEX('_', [File])找到的第一個下劃線字符的索引。
  • SUBSTRING([FILE], 1, CHARINDEX(...) - 1)切斷右側
  • 可選,您可能需要投這INT如果[Journal Source]INT了。