2012-12-04 128 views
8

Tôi gặp vấn đề với ký tự đặc biệt được chèn vào trong bảng SQL Server 2008 R2. Vấn đề là khi tôi đang cố chèn một chuỗi ký tự º (ví dụ 3 ELBOW 90º LONG RADIUS) trong bảng, nó xuất hiện như sau: 3 ELBOW 90 LONG RADIUS, và khi tôi đang cố gắng chọn tất cả các hàng có chứa ký tự kết quả là null.Ký tự đặc biệt trong SQL

tôi đã cố gắng để làm cho lựa chọn với ASCII bằng cách làm này: select * from itemcode nơi mô tả như '%' + char (63) + '%'

và làm cho điều này khi biết rằng ASCII đó biểu tượng là 63:

chọn ASCII (' ')

Nhưng điều đó không hiệu quả. Tôi phải làm gì để chọn tất cả các hàng có ký tự đó và tôi nên làm gì để làm cho SQL nhận ra ký tự º?

Cảm ơn

+0

Bạn đã thử nhân vật 167 chưa? – RonaldBarzell

+0

Nó cũng có thể là một vấn đề với khách hàng SQL của bạn, hoặc truyền các giá trị sai hoặc hiển thị chúng không chính xác. –

+0

Loại dữ liệu cho trường varchar hay nvarchar? Bạn có thể muốn thử nvarchar nếu bạn không sử dụng nó. – wcm

Trả lời

8

Các degree symbol

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

không phải là một thẻ ASCII acter và thường đòi hỏi một cột NVARCHAR và một chuỗi ký tự là N''. (Trừ codepage vv có hỗ trợ các biểu tượng)

63 là mã của question mark, đó là dự phòng cho dấu hỏi ngược của bạn trong ASCII:

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

nơi 65.533 là Unicode Replacement Character dùng để hiển thị ký tự không thể chuyển đổi hoặc hiển thị.

+0

Nhưng làm cách nào tôi có thể chọn tất cả các hàng có chứa Ký tự thay thế Unicode? Tôi đã thử chọn * từ mã mục nơi mô tả như '%' + char (65533) + '%' Nhưng không hoạt động –

+0

bạn nên chèn dữ liệu của mình để Nhân vật thay thế thậm chí không được lưu trữ. thử N '°' thay vì '°'. – devio

+0

Cảm ơn bạn đã trả lời nhưng nếu thông tin đã được lưu trữ và tôi muốn xem tất cả các hàng có vấn đề này thì tôi có thể làm gì? –

2

khi tôi chạy này:

print ascii('º') 

tôi nhận được 186 như giá trị mã ascii, vì vậy hãy thử:

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

để xem tất cả các mã ascii chạy này:

;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) 

EDIT op được nêu trong nhận xét rằng họ đang sử dụng cột nvarchar.

thợ rèn về ascii, sử dụng NCHAR (Transact-SQL) để ra một biểu tượng độ:

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

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

và sử dụng UNICODE (Transact-SQL) để lấy giá trị:

print UNICODE('°') 

lợi nhuận:

176 
+0

Tôi đã thử nhưng không hoạt động = ( –

+0

chạy 'SELECT DATABASEPROPERTYEX ('YOUR_DATABASE_NAME', 'Collation ') SQLCollation; ', tôi nhận được' SQL_Latin1_General_CP1_CI_AS', vì vậy bạn có thể nhận được một cái gì đó khác nhau. –

+0

nếu bạn đang sử dụng nvarchar như đã lưu ý trong một bình luận khác, bạn cần phải quên đi lệnh "ASCII()' ** của SQL Server là viết tắt của 'American Standard Code for Information Interchange' và được thiết lập lâu trước khi quốc tế hóa được xem xét và không bao gồm đủ ký tự đặc biệt. bạn cần ** sử dụng UNICODE ('ncharacter_expression') ** –

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

các chức năng NCHAR (65533) sẽ trả về ký tự bạn đang tìm kiếm.

+0

Không hoạt động đối với tôi. là - '34 '. 'SELECT unicode (SUBSTRING (văn bản, 3, 1))' => kết quả: ** 65533 **. 'SELECT * FROM [dbo]. [Bla] WHERE [văn bản] như N '% [' + nchar (65533) + N ']%'' => rusult: 0 hàng. Nhưng, tôi biết về hơn 19k hàng có ký tự . – TheZodchiy