SQL中的特殊字符

时间:2012-12-04 21:15:08

标签: sql-server ascii

我在SQL Server 2008 R2的表中插入特殊字符时遇到问题。 关键是,当我试图在表格中插入一个带有字符º的字符串(例如3ELBOW90ºLONGRADIUS)时,它显示如下:3 ELBOW90 LONGRADIUS,当我试图选择所有包含字符的行 结果为null。

我尝试使用ASCII进行选择: select * from itemcode,其中描述如'%'+ char(63)+'%'

并使其知道该符号的ASCII为63:

选择ASCII(' ')

但这不起作用。 我必须做什么来选择具有该角色的所有行,以及如何使SQL识别角色?

由于

5 个答案:

答案 0 :(得分:8)

degree symbol

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

不是ASCII字符,通常需要NVARCHAR列和N''字符串文字。 (除了支持符号的代码页等)

63是question mark的代码,它是ASCII中反问号的后备:

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

其中65533是用于显示无法转换或显示的字符的Unicode Replacement Character

答案 1 :(得分: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)

编辑操作在评论中声明他们正在使用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

答案 2 :(得分:1)

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

函数NCHAR(65533)将返回您正在寻找的字符。

答案 3 :(得分:0)

除了确保它是NVARCHAR之外,我还会使用类似的东西

选择(N&#39;�&#39;)

How to display special characters in SQL server 2008?

答案 4 :(得分:0)

我知道这是旧的,但最近遇到了同样的问题,并找到了解决方案here

&#34;我知道在SQL中找到它或删除它的最好方法是使用二进制排序规则来检查它。例如&#34;

Declare @Foo Table(PK int primary key identity, MyData nvarchar(20));
Insert @Foo(MyData) Values (N'abc'), (N'ab�c'), (N'abc�')
Select * From @Foo Where MyData Like N'%�%'

-- Find rows with the character
Select * From @Foo
Where CharIndex(nchar(65533) COLLATE Latin1_General_BIN2, MyData) > 0

-- Update rows replacing character with a !
Update @Foo
set MyData = Replace(MyData, nchar(65533) COLLATE Latin1_General_BIN2, '!')

Select * From @Foo