LIKE
соответствует символьному типу данных, и вы сравниваете пустую строку с =
, поэтому в обоих случаях происходит неявное преобразование.
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