我想以特定的方式更新表A中的第1列:当列中的第三个字符是“_”时,我想插入前两个字符,如果第三个字符是其他任何其他我想留下它,因为它是。
示例:
|col1|
+--------+
|161_512 |
|16_1217 |
|161_512 |
|161512 |
|17_0117 |
|1615_12 |
预期结果:
|col1|
+--------+
|161_512 |
|16 |
|161_512 |
|161512 |
|17 |
|1615_12 |
这就是我到目前为止所做的 - 但这不能正常工作:
UPDATE table A SET col1 = CASE WHEN col1 LIKE '%_%' THEN ... ELSE col1;
答案 0 :(得分:4)
如果要匹配LIKE
表达式中的文字下划线,则需要使用反斜杠对其进行转义。未转义的下划线表示匹配任何单个字符。但是,我会改写您的查询,以便它使用WHERE
子句来确定是否更新给定记录。
UPDATE table A
SET col1 = ...
WHERE col1 LIKE '__\_%'
请注意,LIKE __\_%
表示匹配任意两个字符,后跟文字下划线,后跟其他任何字符。
如果您不愿意处理所有这些,您可以随时使用子字符串来检查第三个字符的值:
UPDATE table A
SET col1 = ...
WHERE SUBSTRING(col1, 3, 1) = '_'
答案 1 :(得分:1)
当列中的第三个字符是" _"我想插入前两个字符
我不知道这意味着什么。前2个字符属性?你想在哪里插入它们?
当列中的第三个字符是" _"
这很简单。您可能已经知道,下划线字符是一个完全匹配一个字符的通配符。因此
LIKE '%_%'
将匹配具有至少一个字符的任何属性。如果您明确想要匹配下划线字符,那么您将转义下划线
LIKE '%\_%'
要求将其作为第三个字符,请在它之前对2个单个字符执行匹配:
LIKE '__\_%'
(L I K E' _ _ \ _')