어떻게 수행하는 경우 검색 및 대체에서 SQL2000/2005?
-
02-07-2019 - |
문제
을 수행하기 위해서 대소문자를 구분하는 검색/바꾸기에서 테이블에 SQL Server2000/2005 데이터베이스를 사용해야 합니다 올바른 데이터 정렬입니다.
어떻게 여부를 확인하 기본 정렬 데이터베이스에 대한은 대소문자를 구분하고,그렇지 않은 경우,수행하는 방법에 대/소문자를 구분하여 검색/대?
해결책
SELECT testColumn FROM testTable
WHERE testColumn COLLATE Latin1_General_CS_AS = 'example'
SELECT testColumn FROM testTable
WHERE testColumn COLLATE Latin1_General_CS_AS = 'EXAMPLE'
SELECT testColumn FROM testTable
WHERE testColumn COLLATE Latin1_General_CS_AS = 'eXaMpLe'
다고 가정하지 않은 기본 정렬이 될 것입니다 경우 민감한 지정하는 경우 민감나마(사용하에 대한 올바른 하나의 언어 코스)
다른 팁
지 여부를 결정하 기본 정렬은 경우 민감한 다음과 같다:
select charindex('RESULT', 'If the result is 0 you are in a case-sensitive collation mode')
그 결과의 0 에 있음을 나타냅 경우 민감한 정렬이 모드,8 임을 나타내는 대소문자를 구분하지 않습니다.
는 경우 콜레이션은,대/소문자를 구분하지 않고 당신이 명시적으로 선언해야 합 정렬하고자 하는 모드를 사용하여 수행하는 경우 검색/교체합니다.
여기를 구성하는 방법을 업데이트 문을 수행할 경우 민감한 검색/바꾸기에 의해 지정하는 콜레이션 모드를 사용:
update ContentTable
set ContentValue = replace(ContentValue COLLATE Latin1_General_BIN, 'THECONTENT', 'TheContent')
from StringResource
where charindex('THECONTENT', ContentValue COLLATE Latin1_General_BIN) > 0
이치 및 교체 'THECONTENT'
, 지 'TheContent'
나 'thecontent'
.
이 있는 경우 서로 다른 경우 동일한 단어 에서 같은 분야, 만하고 싶 대체 특정 사례, 다음을 사용할 수 있습에 정렬 REPLACE
기능:
UPDATE tableName
SET fieldName =
REPLACE(
REPLACE(
fieldName COLLATE Latin1_General_CS_AS,
'camelCase' COLLATE Latin1_General_CS_AS,
'changedWord'
),
'CamelCase' COLLATE Latin1_General_CS_AS,
'ChangedWord'
)
이 결과는:
This is camelCase 1 and this is CamelCase 2
되:
This is changedWord 1 and this is ChangedWord 2
에서 할 수 있는 여러 문입니다.이 지 않을 것이다 작동이 있는 경우 긴 문자열을 모두 포함하는 대문자는 소문자로 말씀하려는 교체합니다.해야 할 수도 있습니다 사용하는 다른 데이터 정렬 이것은 악센트이며 대소문자를 구분합니다.
UPDATE T SET [String] = ReplacedString
FROM [dbo].[TranslationText] T,
(SELECT [LanguageCode]
,[StringNo]
,REPLACE([String], 'Favourite','Favorite') ReplacedString
FROM [dbo].[TranslationText]
WHERE
[String] COLLATE Latin1_General_CS_AS like '%Favourite%'
AND [LanguageCode] = 'en-us') US_STRINGS
WHERE
T.[LanguageCode] = US_STRINGS.[LanguageCode]
AND T.[StringNo] = US_STRINGS.[StringNo]
UPDATE T SET [String] = ReplacedString
FROM [dbo].[TranslationText] T,
(SELECT [LanguageCode]
,[StringNo]
, REPLACE([String], 'favourite','favorite') ReplacedString
FROM [dbo].[TranslationText]
WHERE
[String] COLLATE Latin1_General_CS_AS like '%favourite%'
AND [LanguageCode] = 'en-us') US_STRINGS
WHERE
T.[LanguageCode] = US_STRINGS.[LanguageCode]
AND T.[StringNo] = US_STRINGS.[StringNo]
먼저 이를 확인:http://technet.microsoft.com/en-us/library/ms180175(SQL.90).aspx
당신이 볼 것 CI 지정하는 경우를 구분하지 않고 CS 지정하는 대소문자를 구분합니다.
또한,이 될 수 있습 유용합니다.select*from fn_helpcollations()-이 모든 콜레이션 서버 지원합니다.선택*sys.데이터베이스-여기에 열을 지정하는 콜레이션에는 모든 데이터베이스 서버에 있습니다.
지정할 수 있습니다 정렬 모든 시간을 당신은 테이블을 쿼리하거나 당신에 적용할 수 있는 콜레이 칼럼(s)여 영구적으로 바꾸는 테이블.
당신이 선택하는 경우 쿼리를 수행 방법의 유익한 포함하는 경우 검색 구분 인수 뿐만 아니라.당신이 볼 수는 SQL 선택하는 것이 더 효율적 exec 계획하는 경우에 당신은 그들을 포함됩니다.예를 들어:
SELECT testColumn FROM testTable
WHERE testColumn COLLATE Latin1_General_CS_AS = 'eXaMpLe'
and testColumn = 'eXaMpLe'