2011-10-17 21 views
5

Czy istnieje wbudowana technika obejścia problemu, aby określić, czy znak "IsAlpha"?Serwer SQL: IsCharAlpha


widzę wiele sugestii, które obracają się wokół

IF PATINDEX('[a-zA-Z]', @c) > 0 
BEGIN 
    --It is alpha 
END 

Tyle że zaniedbuje znaki alfa, które nie są w danym zakresie A-Z.

+1

Co alfa znaki są poza A-Z? Czy masz na myśli umlauty itp.? Możesz łatwo dodać dowolne dodatkowe znaki, które chcesz zliczyć jako alfa do dopasowania do wzorca. Używanie zakresu zależy od sortowania, ponieważ różne sortowania mają różne porządki sortowania. Nie ma nic wbudowanego, będziesz musiał zdefiniować własne ... –

+1

Masz na myśli takie znaki jak "â" są pomijane? –

Odpowiedz

4

Zestawienie kontroluje sposób oceny akcentów i znaków diakrytycznych, np. Czy S jest równy Š.

zanotować wyniki dla następujących ... pierwszych SELECT zwraca 2 meczów, drugi zwraca tylko 1 mecz:

DECLARE @testTable TABLE (testValue nvarchar(50)) 

insert into @testTable (testValue) values ('Š') 
insert into @testTable (testValue) values ('S') 
insert into @testTable (testValue) values ('4') 

SELECT 'IsAlpha', testValue 
FROM @testTable 
WHERE PATINDEX('[a-zA-Z]', testValue COLLATE Latin1_General_CS_AS) > 0 

SELECT 'IsAlpha', testValue 
FROM @testTable 
WHERE PATINDEX('[a-zA-Z]', testValue COLLATE LATIN1_GENERAL_BIN) > 0 

You can find a list of collations within SQL Server 2008 and a brief descripition here.

+0

Tricky! Przyjęty. –