如何使用SQL CONCAT / SUBSTR?

时间:2015-02-18 12:14:06

标签: sql oracle concat substr

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

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

继承我的代码:

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

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

3 个答案:

答案 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;

SQL Fiddle demo

答案 1 :(得分:1)

m中的m.name需要定义,但是缺失了CONCAT1(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;