如何使用SQLCONCAT/SUBSTR?

How to use SQL CONCAT/SUBSTR?

我正在尝试为营销 table 中的每个人创建一个用户名。 我想要一个将新用户名插入用户名列的更新语句。

我想取名字的第一个字母,加入姓氏的前5个字母,并将其保存到营销的用户名列中table。我也需要以某种方式将其放入程序中。

这是我的代码:

SELECT CONCAT(m.firstname, 1)||SUBSTR(m.surname, 5)
INTO username
FROM marketing
WHERE marketing_id = 10001;

但是,我收到似乎无法修复的错误,例如名字和姓氏是无效的标识符。在这里的任何帮助表示赞赏。

update username
set username= (select concat(left(firstname,1),left(surname,5))
                  from marketing
                  WHERE marketing_id = 10001)
WHERE marketing_id = 10001;

m.name 中的 m 需要定义,但缺少。 CONCAT (MySQL?) 应该使用字符串,除了字符串之外还传递一个数字 (1)。您的描述提到了两个子字符串,语句只有一个,以 SUBSTR 的出现次数来衡量。如果您的 SQL 方言支持连接运算符,那么它将看不到您想要看到的内容(两个 SUBSTRings)。

您似乎混淆了 concat 函数、substr 函数和连接运算符 (||)。您没有使用 substr 来获取名字的第一个字符,并重新设置您需要提供的两者的长度 both the starting position and the substring length.

您还提到了 m.firstname,但没有将 m 定义为您的 table 名称的别名;这里真的不需要别名,因为只有一个 table 但如果你使用它,请始终如一地使用它。

要获取名字的第一个字母和姓氏的前五个字母,您可以使用:

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;

如果您要更新同一 table 中的列,而不是使用 PL/SQL into 子句,您需要更新而不是 select:

UPDATE marketing
SET username = SUBSTR(firstname, 1, 1) || SUBSTR(surname, 1, 5)
WHERE marketing_id = 10001;

SQL Fiddle demo.