1

루마니아어 발음 구분 기호 (ĂÂÎȘȚ)를 해당 라틴 문자로 대체하는 함수를 작성하려고합니다 (각각 AAIST).replace는 문자열의 시작 부분에만 일치합니다.

SQL 서버의 replaceĂ, ÂÎ과 같이 처리됩니다.

ȘȚ과 같이 이상한 문제가있는 것 같습니다. 문자열 시작 부분에있는 경우에만 바뀝니다. example를 들어

는 :

select replace(N'Ș', N'Ș', N'-') 
-- '-' # OK 

select replace(N'ȘA', N'Ș', N'-') 
-- '-A' # OK 

select replace(N'AȘ', N'Ș', N'-') 
-- 'AȘ' # WHAT?? 

select replace(N'ȘAȘ', N'Ș', N'-') 
-- '-AȘ' # WHAT?? 

나는이 두 SQL 끊다 2008 R2에 대한 행동과 SQL 서버 2012

이 보이는 이상한 결과에 대한 설명이 거기를 재현하는 데 성공? 아니면 그냥 버그일까요?

기본 데이터베이스 데이터 정렬은 SQL_Latin1_General_CP1_CI_AS입니다.

답변

1

데이터 정렬 문제입니다.
처음에는 믿을 수 없기 때문에 재현해야했지만 귀하의 쿼리에는 동일한 문제가있었습니다. 당신은 적절한 데이터 정렬하려고하면

그것은 작동 :

select replace(N'AȘ' COLLATE Latin1_General_BIN, N'Ș', N'-') 
관련 문제