我的查询是
select *
from table_name
where column_name is null or column_name = ''
但是,结果还包含单元格值= 0
当我将查询更改为:
where column_name is null or column_name like ''
值= 0的单元格除外。
数据类型为浮点型。为什么结果不同?使用like和=有什么区别?
答案 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