2012-12-04 7 views
8

Mam problem ze specjalnym znakiem wstawionym do tabeli SQL Server 2008 R2. Chodzi o to, że gdy próbuję wstawić ciąg znaków z literą º (np. 3 ELBOW 90º LONG RADIUS) w tabeli, wygląda to tak: 3 ELBOW 90 LONG RADIUS i gdy próbuję wybrać wszystkie wiersze zawierające znak wynik jest zerowy.Znak specjalny w SQL

Próbowałem zrobić wybierz z ASCII, dokonując w ten sposób: select * from itemcode gdzie opis jak '%' + char (63) + '%'

i uczynić to, aby wiedzieć, że ASCII że symbolem jest 63:

wybierz ASCII ('')

Ale to nie działa. Co muszę zrobić, aby wybrać wszystkie wiersze, które mają tę postać i co zrobić, aby SQL rozpoznał znak º?

Dzięki

+0

Czy próbowałeś znaku 167? – RonaldBarzell

+0

Może to być również problem z klientem SQL, który przesyła nieprawidłowe wartości lub wyświetla je niepoprawnie. –

+0

Czy typ danych dla pola varchar lub nvarchar? Możesz spróbować nvarchar jeśli go nie używasz. – wcm

Odpowiedz

8

degree symbol

U+00B0 ° degree sign (HTML: ° °) 

nie jest znakiem ASCII acter i ogólnie wymaga kolumny NVARCHAR i literału literowego N''. (Z wyjątkiem stron kodowych itp obsługujących symbol)

63 jest kod question mark, który jest awaryjna dla odwrotnym znakiem zapytania w kodzie ASCII:

select UNICODE('�') => 63 
select UNICODE(N'�') => 65533 

gdzie 65533 jest Unicode Replacement Character używany do wyświetlania znaków których nie można przekonwertować ani wyświetlić.

+0

Ale jak mogę zaznaczyć wszystkie wiersze, które zawierają ten znak zastępczy Unicode? Próbowałem wybrać * z kodu przedmiotu, gdzie opis jak "%" + znak (65533) + "%" Ale nie działa –

+0

powinieneś wstawić swoje dane, aby zastępcza postać nie była nawet zapisana. spróbuj N '°' zamiast "°". – devio

+0

Dzięki za odpowiedź, ale jeśli informacje są już zapisane i chcę zobaczyć wszystkie wiersze, które mają ten problem, co mogę zrobić? –

2

gdy uruchomię to:

print ascii('º') 

otrzymuję 186 jako wartość kodu ASCII, więc spróbuj:

select * from YourTable Where Description like '%'+char(186)+'%' 

zobaczyć wszystkie kody ASCII uruchomić to:

;WITH AllNumbers AS 
(
    SELECT 1 AS Number 
    UNION ALL 
    SELECT Number+1 
     FROM AllNumbers 
     WHERE Number<255 
) 
SELECT Number,CHAR(Number) FROM AllNumbers 
OPTION (MAXRECURSION 255) 

EDYCJA op stwierdził w komentarzu, że używają kolumn nvarchar.

fałszerz o ASCII, użyj NCHAR (Transact-SQL) do wyjścia symbol stopni:

print '32'+NCHAR(176)+'F' --to display it 

select * from YourTable 
    Where Description like '%'+NCHAR(176)+'%' --to select based on it 

i używać UNICODE (Transact-SQL) uzyskać wartość:

print UNICODE('°') 

Powroty:

176 
+0

Już próbuję, ale nie działa = ( –

+0

uruchom 'SELECT DATABASEPROPERTYEX ('YOUR_DATABASE_NAME', 'Sortowanie ') SQLCollation; ', otrzymuję' SQL_Latin1_General_CP1_CI_AS', więc prawdopodobnie dostaniesz coś innego –

+0

jeśli używasz nvarchar, jak podano w innym komentarzu, musisz ** zapomnieć o komendzie SQL '' ASCII() '** zapamiętaj to oznacza "amerykański standardowy kod wymiany informacji" i został skonfigurowany na długo przed uznaniem internacjonalizacji i nie zawiera wystarczającej liczby znaków specjalnych. ** trzeba użyć UNICODE ('ncharacter_expression') ** –

1
select top 10 * from table_name 
where tbl_colmn like N'%'+ NCHAR(65533) + N'%' 

funkcja NCHAR (65533) zwróci postać, której szukasz.

+0

Nie działa dla mnie. to - "34 ". 'SELECT unicode (SUBSTRING (tekst, 3, 1))' => wynik: ** 65533 **. 'SELECT * FROM [dbo]. [Bla] WHERE [tekst] jak N '% [' + nchar (65533) + N ']%'' => rusult: 0 wierszy. Ale wiem o ponad 19 tys. Wierszy z charakterem. – TheZodchiy