我正在尝试为营销表中的每个人创建一个用户名。 我想要一个更新语句,将新用户名插入用户名列。
我想取名字的第一个字母,加入姓氏的前5个字母,并将其保存到营销表的用户名栏中。我还需要以某种方式把它放在一个程序中。
继承我的代码:
SELECT CONCAT(m.firstname, 1)||SUBSTR(m.surname, 5)
INTO username
FROM marketing
WHERE marketing_id = 10001;
但是,我收到的错误似乎无法修复,例如firstname和surname是无效的标识符。任何帮助在这里表示赞赏。
答案 0 :(得分:3)
您似乎混淆了concat
函数,substr
函数和连接运算符(||
)。您没有使用substr
来获取名字的第一个字符,并且需要提供both the starting position and the substring length所需的长度。
您还指的是m.firstname
而未将m
定义为您的表名的别名;这里真的不需要别名,因为只有一个表,但是如果你使用它,一直使用它。
要获取姓氏的第一个字母和姓氏的前五个字母,您可以使用:
SELECT SUBSTR(m.firstname, 1, 1) || SUBSTR(m.surname, 1, 5)
FROM marketing m
WHERE m.marketing_id = 10001;
或
SELECT CONCAT(SUBSTR(m.firstname, 1, 1), SUBSTR(m.surname, 1, 5))
FROM marketing m
WHERE m.marketing_id = 10001;
如果您要更新同一个表中的列,而不是使用PL / SQL into
子句,则需要更新而不是选择:
UPDATE marketing
SET username = SUBSTR(firstname, 1, 1) || SUBSTR(surname, 1, 5)
WHERE marketing_id = 10001;
答案 1 :(得分:1)
m
中的m.name
需要定义,但是缺失了CONCAT
。 1
(MySQL?)应该使用字符串,除了字符串之外还传递一个数字(SUBSTR
)。您的描述提到了两个子字符串,该语句只有一个,以SUBSTR
的出现次数来衡量。如果您的SQL方言支持,并置运算符将无法看到您打算查看的内容(两个{{1}})。
答案 2 :(得分:-2)
update username
set username= (select concat(left(firstname,1),left(surname,5))
from marketing
WHERE marketing_id = 10001)
WHERE marketing_id = 10001;