0

和函数没有按预期工作LOCATEFIND_IN_SET如果每个函数的结果为 0 值,则其结果应为 1。

价值观

concat(',',t_insercion.fkCno2011,',') 值为 ,305,

v_curso_cnos.cnos 值为 ,,305,606,

功能

locate(v_curso_cnos.cnos, concat(',',t_insercion.fkCno2011,','))

find_in_set(concat(',',t_insercion.fkCno2011,','), v_curso_cnos.cnos)

查询是:

SELECT r_cursoalumno.fkCurso AS idCurso,
       r_cursoalumno.fkPersona AS persona,
       v_curso_cnos.cnos,
       concat(',',t_insercion.fkCno2011,',') as idCno,
       locate(v_curso_cnos.cnos, concat(',',t_insercion.fkCno2011,',')) as cmp1, 
       find_in_set(concat(',',t_insercion.fkCno2011,','), v_curso_cnos.cnos) as cmp2
FROM v_curso_cnos
  INNER JOIN (r_cursoalumno
  LEFT JOIN t_insercion ON r_cursoalumno.fkPersona = t_insercion.fkPersona)
   ON v_curso_cnos.id = r_cursoalumno.fkCurso
WHERE r_cursoalumno.fkPersona = 20386

查询结果是这样,但locatefind_in_set应该返回一个非零值。他们为什么不呢?

idCurso persona    cnos         idCno   cmp1   cmp2
____________________________________________________
453       20386  ,,305,608,    ,305,      0      0
4

1 回答 1

0

我认为您想在对 LOCATE 的调用中切换参数的顺序。

根据您的输出,v_curso_cnos.cnos返回,,305,608,,而concat(',',t_insercion.fkCno2011,',')返回,305,

LOCATE函数尝试在第二个字符串中查找第一个字符串的出现。在您的情况下,您试图,,305,608,,305,.

FIND_IN_SET在逗号分隔的字符串列表中搜索第一个字符串的出现。这意味着它假定所有 ',' 都是分隔符,而不是字符串的一部分。在您的情况下,您试图在,305,内查找,,305,608,,但该函数将您的第二个字符串解释为五个字符串的列表,'', '', '305', '608', 和''; 其中没有一个包含,305,. 此外,该文档还说明了以下内容:

如果第一个参数包含逗号 (“,”) 字符,此函数将无法正常工作。

于 2012-09-05T12:03:20.723 回答