我有一个drupal数据库,node
表中充满了个人资料。字段node.title
是“名字姓氏”。我想将名称分开,以便node.title
=“Firstname”,并在另一个表中完全覆盖content_type_profile.field_lastname_value
=“姓氏”。两个表中的条目可以在字段nid
上连接。
我喜欢运行一个SQL命令来执行此操作,我很好地采用天真的方法,第一个单词是名字,该字段中的其他所有内容都是姓氏 - 这意味着一些手动修正,但这比首先手动完成要好得多。
(我读了this question,肯定答案就在那里,但我不是那个熟悉SQL的人,也不确定如何让它适用于我的数据库。)
谢谢!
答案 0 :(得分:3)
您可以使用表格中的实际列名替换“John Smith”,但这应该为您提供一般的想法。
select substring('John Smith',1,instr('John Smith',' ')-1) first_name;
select substring('John Smith',instr('John Smith',' ')+1) last_name;
修改强>
这是一个完整的工作示例。我在Oracle上做过,因为我没有drupal,但希望语法应该类似。
CREATE TABLE content_type_profile (nid number,field_lastname_value VARCHAR2(20));
CREATE TABLE node (nid number,title VARCHAR2(20))
DELETE FROM node;
INSERT INTO node VALUES (1, 'John Smith');
INSERT INTO node VALUES (2, 'Jane Doe');
DELETE FROM content_type_profile;
INSERT INTO content_type_profile VALUES (1,NULL);
INSERT INTO content_type_profile VALUES (2,NULL);
UPDATE content_type_profile c
SET field_lastname_value =
(SELECT SUBSTR(n.title,instr(n.title,' ')+1)
FROM node n
WHERE n.nid = c.nid);
SELECT * FROM content_type_profile;
// returns 2 rows, one for Smith and one for Doe
UPDATE node
SET title = SUBSTR(title,1,instr(title,' ')-1);
SELECT * FROM node;
// returns 2 rows, one for John and one for Jane