update t1 set name=(id/2)||substr(name,instr(name,'@'),length(name)-instr(name,'@')) where id=4;
sqlite> CREATE TABLE t1(id int, name varchar(60)); sqlite> INSERT INTO "t1" VALUES(4,'[email protected]'); sqlite> select * from t1; id name ---------- ---------- 4 [email protected] sqlite> update t1 set name=(id/2)||substr(name,instr(name,'@'),length(name)-instr(name,'@')) where id=4; sqlite> select * from t1; id name ---------- ---------- 4 [email protected] sqlite>
上面的截取截取多了一个字符串,修正如下: update t1 set name=(id/2)||substr(name,instr(name,'@'),length(name)-instr(name,'@')+1) where id=4; sqlite> CREATE TABLE t1(id int, name varchar(60)); sqlite> INSERT INTO "t1" VALUES(4,'[email protected]'); sqlite> select * from t1; id name ---------- ---------- 4 [email protected] sqlite> update t1 set name=(id/2)||substr(name,instr(name,'@'),length(name)-instr(name,'@')+1) where id=4; sqlite> select * from t1; id name ---------- ---------- 4 [email protected] sqlite>
sqlite> CREATE TABLE t1(id int, name varchar(60));
sqlite> INSERT INTO "t1" VALUES(4,'[email protected]');
sqlite> select * from t1;
id name
---------- ----------
4 [email protected]
sqlite> update t1 set name=(id/2)||substr(name,instr(name,'@'),length(name)-instr(name,'@')) where id=4;
sqlite> select * from t1;
id name
---------- ----------
4 [email protected]
sqlite>
update t1 set name=(id/2)||substr(name,instr(name,'@'),length(name)-instr(name,'@')+1) where id=4;
sqlite> CREATE TABLE t1(id int, name varchar(60));
sqlite> INSERT INTO "t1" VALUES(4,'[email protected]');
sqlite> select * from t1;
id name
---------- ----------
4 [email protected]
sqlite> update t1 set name=(id/2)||substr(name,instr(name,'@'),length(name)-instr(name,'@')+1) where id=4;
sqlite> select * from t1;
id name
---------- ----------
4 [email protected]
sqlite>
非常感谢你的回答,这样是没问题的,那如果我想用bind的方式来设置,下面的语句是否可行呢?因为那个域名是从外面传进来的:
sprintf(buf, "update contact set name=(id/2)||'@'||? ;");
ret= sqlite.ExecuteQuery(buf);
if (ret == SQLITE_OK)
{
sqlite.BindText(1, domain.c_str(), domain.length(), SQLITE_TRANSIENT);
sqlite.Next();
sqlite.CloseResult();
}
非常感谢你的回答,这样是没问题的,那如果我想用bind的方式来设置,下面的语句是否可行呢?因为那个域名是从外面传进来的:
sprintf(buf, "update contact set name=(id/2)||'@'||? ;");
ret= sqlite.ExecuteQuery(buf);
if (ret == SQLITE_OK)
{
sqlite.BindText(1, domain.c_str(), domain.length(), SQLITE_TRANSIENT);
sqlite.Next();
sqlite.CloseResult();
}
么有用过bind,不过sql语句到哪里都是可以执行的,你试试看。