2017-10-06 67 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了。