SQL Server选择查询多个结果

问题描述 投票:1回答:1

我正在使用SQL Server 2012(SP3-CU2)(KB3137746)

我有一个表POLICY并尝试选择与policyNumber匹配的行。此列的类型为VARCHAR

第一种情况:

select * 
from POLICY 
where PolicyNumber = 1234

它返回两行

PolicyNumber  CustomerId
------------------------
001234        000789
1234          000567

接下来,我试图在表格中找到这些案例 - 有多少这样的案例?

第二种情况:

Select Count(1) As Number_Of_policy, PolicyNumber     
From POLICY 
Group By PolicyNumber    
Having Count(1) > 1

它没有返回预期的行。

然后我修改了查询

第三种情况:

Select Count(1) As Number_Of_policy, CAST(PolicyNumber AS int) policyNum   
From POLICY
Group By CAST(PolicyNumber AS int)    
Having Count(1) > 1

它正在返回行。

我的问题是为什么在写正常选择查询时这种行为?它是默认类型情况和第一种情况下返回的行吗?

sql select sql-server-2012 group-by
1个回答
2
投票

文本001234与文本1234不同。但是如果你把它们都转换成整数,那么它们就变成了相同的数字1234

这里的故事的寓意是,如果您打算将策略数字表示为那样,即数字,则将它们存储在数字列中。

如果您想知道为什么第一个查询返回两行:

SELECT * from POLICY WHERE PolicyNumber = 1234;

在这种情况下,SQL Server正在对PolicyNumber进行隐式转换为整数。

© www.soinside.com 2019 - 2024. All rights reserved.