挣扎着以下。 下面是我运行以下查询时的屏幕截图 -
select [Journal Source], [File], filepath from xIntegration..FinanceIntegration WHERE FilePath like '%rent debit%'
我要做的是使用字段File的_(下划线)之前的第一个数字更新Journal Source。
当我运行以下代码时,它将所有行的Journal Source设置为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 :(得分:2)
正确的想法,除了使用变量。你想要:
UPDATE FinanceIntegration
SET [Journal Source] = SUBSTRING([File], 0, CHARINDEX('_', [File]))
WHERE FilePath like '%rent debit%';
变量具有单个值,来自表的任意行。
答案 1 :(得分:0)
我会使用SUBSTRING
,CHARINDEX
和CAST
的组合进行更新:
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
,则可能需要将其强制转换为#legacySQL
SELECT DATE,
SUM(totals.visits) AS sessions,
fullVisitorId,
MAX(CASE WHEN hits.customdimensions.index = 3 THEN hits.customdimensions.value END) dogs
FROM [project:dataset.table]
WHERE REGEXP_MATCH(hits.customdimensions.value, r'^[0-9]')
GROUP BY DATE, fullVisitorId
ORDER BY dogs DESC
。