今天在论坛中看到一个关于mysql的问题,问题如下
good_id cat_id
12654 665,569
12655 601,4722
goods_id是商品id
cat_id是分类id
当我,怎么根据这种分类ID查数据(一个商品有多个分类,而且用逗号隔开了)
我现在用的是like 这样的话,输入一个分类id是688,或者4722都能出来这个商品,但输入一个722也出来这个商品了。
如果用like做的话,肯定会有问题的,我的开始的想法是,把cat_id里面的字符串换成数组,这样可以利用mysql里面的in操作,这样就不会出现查找722,而4722类别下的产品都跑出来了。我从网上找了半天,这方面的字符串操作函数,没找到,不过我发现了find_in_set这个函数虽然不能,将字符串转换成数组,但是也不会出现上面的情况。我发现自己有好多函数不知道,所以我从手册中,以及网上收集了半天,做了一些例子。
CHAR_LENGTH(str) 返回str的字符数
LENGTH(str) 返回str的字节长度
CONCAT(str1,str2....) 返回参数str1,str2....的拼接,有一个null值则返回null
CONCAT_WS(x,str1,str2...) ---concat with separator 第一个参数x代表分隔符,后面的参数为字符串
如果x为NULL则返回NULL,如果字符串有NULL会被忽略
INSERT(s1,x,len,s2) 字符串替换 s1 目标字符串 x为s1的开始位置(下标从1开始) len为x之后的长度 s2为需要替换的字符串
如果x超过s1的长度下标,则返回s1,如果len大于x之后剩余字符串长度,则全部替换
LOWER(str)、LCASE(str) 字符串转为小写
UPPER(str)、UCASE(str) 字符串转为大写
LEFT(str,n) 返回字符串str最左边的n个字符
RIGHT(str,n) 返回字符串str最右边的n个字符
LPAD(s1,len,s2) 返回s2从s1的左边填充直到总长度为len,如果len RPAD(s1,len,s2) 返回s2从s1的右边填充直至len的长度,如果len LTRIM(S) 删除左侧的空格 RTRIM(s) 删除右侧的空格 TRIM(s) 删除两侧的空格 TRIM(s1 FROM s2) 删除s2两端出现的s1字符串 REPEAT(s,n) 返回n个s组成的字符串,n<=0,返回空;s或者n为NULL,返回NULL SPACE(n) 返回n个空格字符串 REPLACE(s,s1,s2) 返回--由s2替换s中的所有s1字符串的结果 STRCPM(s1,s2) s1==s2 返回0 s1 SUBSTRING(s,n,len) 、MID(s,n,len)返回s从n开始的len长度的字符串 ,若n<0,则从s的最后倒数n个开始截取,n=0的话返回空字符串;len可以省略-截取n之后的所有字符 LOCATE(str1,str2)、POSITION(str1 IN str2)、INSTR(str2,str1) 返回str1在str2中出现的开始位置 REVERSE(s) 返回s的字符串的反转 ELT(n,str1,str2,str3...) 返回str1,str2.. 中的第n个字符串 ,n超出返回返回null FIELD(s,str1,str2,str3....) 返回s在str1,str2.....中的第一次出现的位置,没有返回0 FIND_IN_SET(s,str1) 返回s在str1中的出现的位置,其中str1由多个字符串组成,逗号隔开的列表 Atas ialah kandungan terperinci MySQL中字符串函数的详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!