like和=之间的差异,单元格的值= 0

时间:2018-06-26 04:05:07

标签: sql sql-server sql-server-2014

我的查询是

select * 
from table_name
where column_name is null or column_name = ''

但是,结果还包含单元格值= 0

当我将查询更改为:

where column_name is null or column_name like ''

值= 0的单元格除外。

数据类型为浮点型。为什么结果不同?使用like和=有什么区别?

1 个答案:

答案 0 :(得分:1)

LIKE匹配字符数据类型,并且您将a与带有=的空字符串进行比较,因此在两种情况下都发生隐式转换。

declare @t table (flt float)
insert into @t
values
(1234567891.123456789123456789),
(0.00001),
(0.00)

select 
    * 
    ,str(flt) --truncates the decimal, only pulling back the default toal length of 10
    ,AsciiDecimal = ascii(substring(str(flt),1,1)) --32 is ASCII decimal for space
from @t

您将看到,此转换用空格填充您的值。子句LIKE ''声明了任何类似空格的内容,而= ''声明了任何等于空格的内容。 <space> 0就像一个空格,但不等于一个空格。

请记住,[FLOAT][2]是无法精确表示的近似数据类型。尽可能使用十进制。其次,您可以简单地使用数字比较而不是字符串比较。即where column_name != 0。由于您的列的类型为FLOAT,因此插入空格将使其变为0。

declare @space table (flt float)
insert into @space
values
('')

select * from @space