我有以下代码:
UPDATE tableOne
SET columnOne = CASE
WHEN tableOne.columnTwo LIKE '%-02-%' OR tableOne.columnTwo LIKE '%-03-%' OR
tableOne.columnTwo LIKE '%-04-%' OR
tableOne.columnTwo LIKE '%-05-%' OR
tableOne.columnTwo LIKE '%-06-%' OR
tableOne.columnTwo LIKE '%-07-%' OR tableOne.columnTwo LIKE '%-08-%' OR
tableOne.columnTwo LIKE '%-09-%'
THEN tableTwo.columnOne :: text
ELSE tableOne.columnOne
END
FROM tableTwo
WHERE tableTwo.tableId = tableOne.tableId
我有两个桌子。 tableOne
由1亿行(和40列)组成,而tableTwo
由9千万行组成。以上查询已经进行了2天以上。我不确定它是否会完成。有没有一种优化查询的方法?
LIKE
如果有帮助,请执行以下操作:
检查字符串(例如2018-06-30 08:20:17
)是否已列出月份。如果是,请从tableTwo
中选择值(并将其投放以键入text
),否则保留自身价值(已输入text
)。
答案 0 :(得分:1)
仅当月份在02到09之间时才更新
UPDATE tableOne
SET columnOne = tableTwo.columnOne :: text
FROM tableTwo
WHERE tableTwo.tableId = tableOne.tableId
AND SUBSTRING(tableOne.columnTwo FROM 6 FOR 2) BETWEEN '02' AND '09'
答案 1 :(得分:1)
将addressline2
条件移至output_1.append(addressline2.split(","))
子句:
case
正则表达式实际上并没有比一堆赞快得多。这里的胜利在于不更新不需要更新的行。如果where
的格式是已知格式,则可以改用子字符串操作。