我在SQL Server 2008 R2的表中插入特殊字符时遇到问题。 关键是,当我试图在表格中插入一个带有字符º的字符串(例如3ELBOW90ºLONGRADIUS)时,它显示如下:3 ELBOW90 LONGRADIUS,当我试图选择所有包含字符的行 结果为null。
我尝试使用ASCII进行选择: select * from itemcode,其中描述如'%'+ char(63)+'%'
并使其知道该符号的ASCII为63:
选择ASCII(' ')
但这不起作用。 我必须做什么来选择具有该角色的所有行,以及如何使SQL识别角色?
由于
答案 0 :(得分:8)
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)
答案 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