我是SQL的新手(3天前开始学习),所以我假设我的代码中有一些可怕的语法错误。
我从昨天起就开始尝试创建一个更新查询,根据以下条件使用案例来修改value
列:
value
包含字母'a'时,请将值设为大写。value
包含字母'd',但不包含字母'a',请将value
设为小写。value
不符合上述条件,请将UPDATE t1
SET value =
CASE WHEN value LIKE '%a%' THEN SET value = UPPER(value)
WHEN value LIKE '%d%' AND value NOT LIKE '%a' THEN SET value = LOWER(value)
ELSE REPLACE(value,'_%','1') AND REPLACE(value,'%_','2')
END
Where value IS NOT NULL;
中的第一个和最后一个字母更改为1和2。我尝试过这么多种不同的方式,但我总是遇到某种错误。此代码返回Missing Keyword Error:
public static Expression Sum(IList<Expression> expressions)
{
Expression result = expressions[0];
foreach (var expression in expressions.Skip(1))
{
result = Expression.Add(result, expression);
}
return result;
}
答案 0 :(得分:1)
CASE
会返回一个值,因此您不需要SET
。 AND
是一个条件运算符,它不是用于一起运行命令。
REPLACE()
无法按照您尝试使用它的方式运行。它需要文字而不是通配符。因此,除非value
以下划线开始并结束,'_%'
命令不会改变任何内容。而不是REPLACE()
我建议您使用SUBSTR()并连接替换字符。
UPDATE t1
SET value =
CASE WHEN value LIKE '%a%' THEN UPPER(value)
WHEN value LIKE '%d%' AND value NOT LIKE '%a' THEN LOWER(value)
ELSE '1'||substr(value, 2, length(value)-2) ||'2'
END
Where value IS NOT NULL;
或者,您可以使用正则表达式替换函数
ELSE regexp_replace(value, '^(.)(.*)(.)$', '1\22'
但是,当value
的长度为1时,输出略有不同。
答案 1 :(得分:0)
syntex
中有很多Case statment
错误,您无法再次使用SET
operation
而您无法使用separated replace
更改
1. SET value = UPPER(value)
到UPPER(value)
2。SET value = LOWER(value)
到LOWER(value)
和
3. remove
秒replace
喜欢这个
UPDATE t1
SET value =
CASE WHEN value LIKE '%a%' THEN SET UPPER(value)
WHEN value LIKE '%d%' AND value NOT LIKE '%a' THEN LOWER(value)
ELSE REAPLACE(REPLACE(value,'_%','1'),'%_',2)
END
Where value IS NOT NULL;