2012-12-04 145 views
8

我在SQL Server 2008 R2的表中插入特殊字符時遇到問題。 重點是,當我試圖插入一個字符串與字符º(例如3 ELBOW90ºLONG RADIUS)在這個像這樣:3 ELBOW90 LONG RADIUS,當我試圖選擇所有包含字符的行的結果爲空。SQL中的特殊字符

我試着與ASCII選擇通過使這樣的: SELECT * FROM itemcode內容描述LIKE '%' + CHAR(63)+ '%'

,使這個知道的是,ASCII符號是63:

選擇ASCII( '')

但是,這並不工作。 我必須做些什麼來選擇所有具有該角色的行,以及我應該如何使SQL識別角色?

感謝

+0

你試過了字符167嗎? – RonaldBarzell

+0

它也可能是您的SQL客戶端的問題,無論是傳輸錯誤的值還是錯誤地顯示它們。 –

+0

字段varchar或nvarchar的數據類型是什麼?如果你不使用它,你可能想嘗試nvarchar。 – wcm

回答

8

degree symbol

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

不是ASCII字符acter,通常需要一個NVARCHAR列和一個N''字符串文字。 (除了支持符號代碼頁等)

63是question mark的代碼,這是您的逆問號ASCII回退:用於顯示字符

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

其中65533是Unicode Replacement Character無法轉換或顯示。

+0

但我怎麼能選擇所有包含該Unicode替換字符的行?我嘗試了 select * from itemcode其中描述類似'%'+ char(65533)+'%' 但不起作用 –

+0

您應該插入數據,以便替換字符不會被存儲。嘗試N'°'而不是'°'。 – devio

+0

感謝您的迴應,但如果信息已經存儲,我想看到所有有這個問題的行我該怎麼辦? –

2

當我運行此:

print ascii('º') 

我得到186爲ASCII碼值,所以嘗試:

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

看到所有的ASCII碼運行此:

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

編輯 op在註釋中聲明他們使用的是nvarchar列。

僞造有關ASCII,使用NCHAR (Transact-SQL)輸出度的符號:

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

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

,並使用UNICODE (Transact-SQL)來獲取值:

print UNICODE('°') 

回報:

176 
+0

我已經嘗試,但不起作用=( –

+0

運行'SELECT DATABASEPROPERTYEX( 'YOUR_DATABASE_NAME',「整理')SQLCollat​​ion;',我得到'SQL_Latin1_General_CP1_CI_AS',所以你可能會得到不同的結果 –

+0

如果你在另一個註釋中使用nvarchar,你需要忘掉SQL Server的ASCII()命令。代表美國'標準碼信息Interchange'和成立不久,被認爲是國際化的,並且不包括足夠的特殊字符。你需要**使用Unicode(「ncharacter_expression」)** –

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

該函數NCHAR(65533)將返回你正在尋找的角色。

+0

對我無效。是 - '34 '。 'SELECT unicode(SUBSTRING(text,3,1))'=> result:** 65533 **。 'SELECT * FROM [dbo]。[bla] WHERE [text] like N'%['+ nchar(65533)+ N']%''=> rusult:0 rows。但是,我知道有超過19K行與 字符。 – TheZodchiy