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 への呼び出しでパラメーターの順序を切り替えたいと思います。

あなたの出力に基づいて、 return 、 while v_curso_cnos.cnosreturnsを返します。,,305,608,concat(',',t_insercion.fkCno2011,','),305,

このLOCATE関数は、2 番目の文字列内で最初の文字列の出現箇所を見つけようとします。,,305,608,あなたの場合、あなたは内で見つけようとしています,305,

FIND_IN_SETコンマ区切りの文字列リスト内の最初の文字列を検索します。つまり、すべての「,」は区切り文字であり、文字列の一部ではないと見なされます。あなたの場合、,305,内で検索しようとしていますが、関数は 2 番目の文字列を、、、、、および,,305,608,の 5 つの文字列のリストとして解釈''します。を含むものはありません。さらに、ドキュメントには次のように記載されています。'''305''608''',305,

最初の引数にコンマ (",") 文字が含まれていると、この関数は正しく動作しません。

于 2012-09-05T12:03:20.723 に答える