2012-09-05 36 views
0

LOCATEFIND_IN_SET函數無法按預期工作。如果它是0值,每個函數的結果應該是1。查詢無法找到以逗號分隔的字段中的子串

VALUES

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 

查詢結果是這樣的,但定位FIND_IN_SET應該是返回一個非零值。他們爲什麼不是?

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

回答

0

我想你想在你的調用中將參數的順序切換到LOCATE。

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

LOCATE函數嘗試查找第二個字符串中第一個字符串的出現。在你的情況下,你試圖在,305,內找到,,305,608,

FIND_IN_SET逗號分隔字符串列表中搜索發生的第一個字符串。這意味着它假設所有','是分隔符,而不是字符串的一部分。在您的情況下,您試圖在,,305,608,內找到,305,,但函數會將您的第二個字符串解釋爲五個字符串的列表,'''''305''608''';其中沒有包含,305,。此外,該文件規定如下:

此功能不正常,如果第一個參數包含一個逗號 (「」)字符工作。

相關問題