2013-08-20 1 views
1

데이터베이스 테이블 열에서 다음 스페인어 문자열을 고려 서명 :

¿Donde estas? 
!Aqui ando¡ 
Porque 
...Donde 
¿Porque? 

나는 테이블 열, 구두점 표시를 정렬하려면 다른 스페인어 정렬은 MySQL이 제공하는 사용하는 경우 정렬에 포함됩니다. 일부 스페인어 데이터 정렬은 시작 부분에 문장 부호가있는 문자열을, 일부는 끝에 정렬합니다.

스페인어 학술지에 따르면 정렬은 공식 스페인어 알파벳 (a, b, c, d, e, f, g, h, i, j, k, l, m, r, s, t, u, v, w, x, y, z) 따라서 구두점 기호는 문자열을 정렬하는 데 사용해서는 안됩니다. 모든 mySQL 스페인어 데이터 정렬에 의한 주문 사용이 잘못되어이를 사용하고 싶지 않습니다.

편지의 스페인어 아카데미에 따르면, 위의 문자열에 대한 올바른 정렬 순서는 다음과 같습니다 내 옆에 최선의 선택이 무엇인지 그래서

!Aqui ando¡ 
¿Donde estas? 
Donde estas 
...Donde 
Porque 
¿Porque? 

, ...

내가 내 쿼리에서 정규 표현식을 사용할 수 멍청한 징후없이 주문 하시겠습니까?

또는 열을 만들 수있는 선택의 여지가 없습니다. 여기에 문장 부호가없는 문자열이 들어있는 sort_name을 호출하고 그 열을 사용하여 주문 하시겠습니까? 이것이 최선의 접근 방법입니까?

mySQL에서 스페인어 정렬을 사용하여 n과 o 사이에 들어가는 문자 ​​인 ñ를 주문해야합니다.

+0

계속 연구 중이며 mysql에서 regexp 함수 (예 : oracle's regexp_replace)를 주문하는 것으로 보인다 ... 너무 나쁘다. 그래서 내 다른 옵션은 새로운 열 또는 다른 것입니다. – Marco

답변

1

스페인어의 경우 첫 번째 문자는 구두점이거나 ...입니다. 당신은 같은 것을 할 수있는 :

order by (case when left(col, 3) = '...' then substr(col, 4) 
       when left(col, 1) in ('!', '?', . . .) then substr(col, 2) 
       else col 
      end) 

(내 사과,하지만 난 in 목록 내 키보드에서 해당 스페인어 문자가 없습니다.)

+0

이것은 내가해야한다는 것을 의미합니다. 모든 가능한 풋고목 표지와 악센트 부호가있는 문자 및 기타 물건을 문자열이 두 개의 문장 부호로 시작하면 어떻게 될까요? 새 열을 추가하고 케이싱을 사용하는 사이에 확실하지 않습니다 ... – Marco

+0

저는 데이터를 분석하고 있는데이 경우를 찾았습니다 : 올레 콘 및 올레, 카테터! 내가 케이싱 솔루션을 사용한다면, ¡ ¡ ° Ole, Catapum! 올레 콘 올레 (Ole con ole)를 따라 분류 할 것이고 그건 틀린 것입니다. 다른 말로하면, 특수한 구두점 문자도 빈둥 거리는 것뿐만 아니라 문자열 내부에서 찾을 수 있습니다. 내가 그것에 대해 생각할수록 새로운 열을 추가하는 것이 솔루션이라고 생각합니다. – Marco

+0

@Marco. . . 새 열을 추가하지 않아도됩니다. 논리를'order by' 절에 넣을 수 있습니다. 그런데 로케일을 "es_ES"로 설정 했습니까? –

1

하나의 옵션은 UDF를 사용하려고 할 수 있습니다 Regular Expression MySQL UDFs, 특히 REGEXP_REPLACE?

또 다른 옵션은 common_schema, 특히 replace_all 기능과 같이 사용할 수 있습니다 : 당신은 몇 가지 세부 사항을 해결해야

SELECT `mycolumn` FROM `mytable` ORDER BY `common_schema`.replace_all(`mycolumn`, '¡!¿?.', ''); 

, 그러나 가능한 옵션입니다.