在SQL Server中,Oracle的varchar2等效类型是什么?

3
create table #temp(name nvarchar(10))
insert into #temp values('one')
select * from #temp where name = 'one'
select * from #temp where name = 'one ' --one with space at end
drop table #temp

在上面的代码中,我使用了nvarchar数据类型来存储名称。我的要求是第一个查询应该返回结果,而第二个查询不应该返回结果。请注意不要修剪名称。请建议我在SQL Server中可以使用哪种数据类型来实现这一点?

1个回答

1

这个问题不能通过数据类型解决。你需要看一下这篇文章: INF:SQL Server如何比较带尾随空格的字符串

SQL Server 遵循 ANSI/ISO SQL-92 规范(第8.2节,通用规则#3)比较带空格的字符串。ANSI 标准要求对用于比较的字符 串进行填充,以使它们的长度在比较之前匹配。这种填充直接影响 WHERE 和 HAVING 子句谓词以及其他 Transact-SQL 字符串比较的语义。例如,Transact-SQL 认为字符串“abc”和“abc ”在大多数比较操作中是等效的。

有几种方法可以解决这个问题,其中一种是使用 Like

select * from #temp where name like 'one ' --one with space at end

这将返回没有结果。

您应该看到这篇博客文章:Testing strings for equality counting trailing spaces,作者是AnthonyBloesch


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接