8

我在 SQL Server 2008 R2 的表中插入特殊字符时遇到问题。关键是,当我尝试在表中插入带有字符 º 的字符串(例如 3 ELBOW 90º LONG RADIUS)时,它看起来像这样:3 ELBOW 90� LONG RADIUS,并且当我尝试选择所有包含字符 � 的行结果为空。

我尝试通过以下方式使用 ASCII 进行选择: select * from itemcode where description like '%'+char(63)+'%'

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

选择 ASCII('�')

但这不起作用。我必须做什么来选择所有具有该字符的行,我应该怎么做才能使 SQL 识别字符 º?

谢谢

4

5 回答 5

9

学位符号

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

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

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

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

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

于 2012-12-04T21:45:05.140 回答
3

当我运行这个:

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
于 2012-12-04T21:45:46.853 回答
1
select top 10 * from table_name 
where tbl_colmn like N'%'+  NCHAR(65533) + N'%'

the function NCHAR(65533) will return the character your're looking for.

于 2014-10-10T10:13:24.047 回答
0

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

选择(N''')

如何在 SQL Server 2008 中显示特殊字符?

于 2012-12-04T21:44:47.020 回答
0

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

“我知道在 SQL 中找到或摆脱它的最佳方法是使用二进制排序规则检查它。例如”

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
于 2018-05-16T08:56:47.447 回答