1. 用法一

LOCATE(substr,str) 

POSITION(substr IN str)

函数返回子串substr在字符串str中第一次出现的位置。如果子串substr在str中不存在,返回值为0。

mysql> SELECT LOCATE('bar', 'foobarbar'); 

-> 4 

mysql> SELECT LOCATE('xbar', 'foobar'); 

-> 0 


这个函数是大小写不敏感的。在MySQL3.23中,这个函数是字母大小写敏感的,当在MySQL4.0中时,如有任一参数是一个二进制字符串,它才是字母大小写敏感的。 


2. 用法二

LOCATE(substr,str,pos) 

函数返回子串substr在字符串str中的第pos位置后第一次出现的位置。如果substr不在str中返回0。 

mysql> SELECT LOCATE('bar', 'foobarbar',5); 

-> 7 


这个函数是大小写不敏感的。在 MySQL 3.23 中,这个函数是字母大小写敏感的,当在 MySQL 4.0 中时,如有任一参数是一个二进制字符串,它才是字母大小写敏感的。 


3. 例子 

SELECT * FROM tb_name WHERE LOCATE(colum1,colum1,1)>0



语法:MySQL中INSERT INTO SELECT的使用



介绍
      有三张表a、b、c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段。对于这种情况,可以使用如下的语句来实现:

INSERT INTO db1_name (field1,field2) SELECT
 

两个表的数据互插,如果多个表就不适应了。对于多个表,可以先将需要查询的字段JOIN起来,然后组成一个视图后再SELECT FROM就可以了:

INSERT INTO a (field1,field2) SELECT * FROM(SELECT b.f1,c.f2 FROM b JOIN
 

      其中f1是表b的字段,f2是表c的字段,通过JOIN查询就将分别来自表b和表c的字段进行了组合,然后再通过SELECT嵌套查询插入到表a中,这样就满足了这个场景了,如果需要不止2个表,那么可以多个JOIN的形式来组合字段。

2. 语法错误注意
      需要注意的是嵌套查询部分最后一定要有设置表别名,如下:

SELECT * FROM (SELECT f1,f2 FROM b JOIN c) AS tb

必须的(tb这个名称可以随意取),即指定一个别名。每个派生出来的新表都必须指定别名,否则在mysql中会报如下错误:

ERROR 1248 (42000): Every derived TABLE must have its own alias
 

不能加VALUES,即不能写成如下形式:

INSERT INTO db1_name(field1,field2) VALUES SELECT field1,field2 FROM db2_name
 

You have an error in your SQL syntax