Sim*_*mon 15 sql t-sql sql-server
在我的数据库中,我有这个char .我想用查询找到它们
Select *
from Sometable
where somecolumn like '%?%'
Run Code Online (Sandbox Code Playgroud)
这让我没有结果.
我认为这是ANSI编码
The*_*war 14
使用N如下
where col like N'%?%'
Run Code Online (Sandbox Code Playgroud)
前缀Unicode字符串常量,字母为N.如果没有N前缀,则将字符串转换为数据库的默认代码页.此默认代码页可能无法识别某些字符.
感谢马丁史密斯,早些时候,我只测试过一个字符,但它确实有效,但正如马丁指出的那样,它会返回所有字符.
以下查询工作并仅返回预期
select * from #demo where id like N'%?%'
COLLATE Latin1_General_100_BIN
Run Code Online (Sandbox Code Playgroud)
演示:
create table #demo
(
id nvarchar(max)
)
insert into #demo
values
(N'?'),
( N'?')
Run Code Online (Sandbox Code Playgroud)
要了解有关unicode的更多信息,请参阅以下链接
http://kunststube.net/encoding/
它可以匹配UCS-2编码中的2,048个无效代码点中的任何一个(或U+FFFD
符号本身的单个字符).
您可以使用范围和二进制collate子句来匹配它们(演示).
WITH T(N)
AS
(
SELECT TOP 65536 NCHAR(ROW_NUMBER() OVER (ORDER BY @@SPID))
FROM master..spt_values v1,
master..spt_values v2
)
SELECT N
FROM T
WHERE N LIKE '%[' + NCHAR(65533) + NCHAR(55296) + '-' + NCHAR(57343) + ']%' COLLATE Latin1_General_100_BIN
Run Code Online (Sandbox Code Playgroud)
您可以使用ASCII
查找该char的ascii代码
Select ascii('?')
Run Code Online (Sandbox Code Playgroud)
并用于CHAR
从该代码中检索char并将其组合在LIKE
表达式中
Select * from Sometable
where somecolumn like '%'+CHAR(63)+'%'
Run Code Online (Sandbox Code Playgroud)
请注意,您使用的排序规则会影响结果.此外,它还取决于应用程序用于提供数据的编码(UTF-8,UNICODE等).还有你如何存储VARCHAR,或者NVARCHAR对你看到的内容有最后的发言权.
还有更多在这里在这个类似的问题
编辑 @Mark
试试这个简单的测试:
create table sometable(somecolumn nvarchar(100) not null)
GO
insert into sometable
values
('12345')
,('123?45')
,('12345')
GO
select * from sometable
where somecolumn like '%'+CHAR(63)+'%'
GO
Run Code Online (Sandbox Code Playgroud)
这只意味着存储的角色赢得了"?" 在这个测试中.
当你看到 这意味着你所看到的应用程序不太确定要打印出来的内容.
它也意味着OP可能需要找出使用查询的char是什么.另请注意,这意味着输出的字符串 可以由不同的字符组成.
CHAR(63)只是一个例子,但你是对的,在ASCII表中这将是一个标准的审讯.
编辑 @Bridge
现在没有时间深入挖掘它,但下面的测试不起作用
Select ascii('?'), CHAR(ascii('?')), UNICODE(N'?'), CHAR(UNICODE(N'?'))
GO
create table sometable(somecolumn nvarchar(100) not null)
GO
insert into sometable
values
('12345')
,('123?45')
,('12345')
,('12'+NCHAR(UNICODE(N'?'))+'345')
GO
select * from sometable
where somecolumn like '%'+CHAR(63)+'%'
select * from sometable
where somecolumn like '%'+NCHAR(UNICODE(N'?'))+'%'
GO
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1401 次 |
最近记录: |