Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / пробел равен пустой строке / 25 сообщений из 27, страница 1 из 2
12.07.2012, 14:27
    #37876627
sp_eedo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
Народ, подскажите пожалуйста как сделать чтобы условие не выполнялось.

Код: sql
1.
2.
3.
if  '    '  = '' begin
	print 'x'
end
...
Рейтинг: 0 / 0
12.07.2012, 14:30
    #37876630
sp_eedo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
sp_eedo,
имеется ввиду
слева от равно пробел или 2 пробела
справа пустая строка

Код: sql
1.
2.
3.
if  ' '  = '' begin
	print 'x'
end
...
Рейтинг: 0 / 0
12.07.2012, 14:35
    #37876636
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
что за бред?
что конкретно то нужно?
...
Рейтинг: 0 / 0
12.07.2012, 14:36
    #37876639
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
sp_eedo,
при сравнении пробелы справа игнорируются. приводите к binary или дополнительно сравнивайте datalength() этих строк
...
Рейтинг: 0 / 0
12.07.2012, 19:13
    #37877228
Max_Tpop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
sp_eedo,

Как вариант можно использовать ASCII
...
Рейтинг: 0 / 0
12.07.2012, 20:02
    #37877263
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
Код: sql
1.
2.
3.
if  '' LIKE '    ' begin
	print 'x'
end
...
Рейтинг: 0 / 0
13.07.2012, 10:44
    #37877737
пробел равен пустой строке
if QUOTENAME(' ') = '' begin
print 'x'
end
...
Рейтинг: 0 / 0
13.07.2012, 10:49
    #37877744
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
Виталий Гонтовойif QUOTENAME(' ') = '' begin
print 'x'
endА справа почему QUOTENAME нет?
...
Рейтинг: 0 / 0
13.07.2012, 11:04
    #37877773
пробел равен пустой строке
да. недописал.
...
Рейтинг: 0 / 0
13.07.2012, 11:25
    #37877807
для тупых
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
iap
Код: sql
1.
2.
3.
if  '' LIKE '    ' begin
	print 'x'
end


а почему ('' LIKE ' ') = false, a (' ' LIKE '') = true?
...
Рейтинг: 0 / 0
13.07.2012, 11:41
    #37877837
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
для тупыха почему ('' LIKE ' ') = false, a (' ' LIKE '') = true?Потому что LIKE не коммутативный оператор.
...
Рейтинг: 0 / 0
13.07.2012, 12:06
    #37877891
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
invmLIKE не коммутативный оператор IN кстати тоже
Здравствуйте коллега.

для тупых , по определению:
<строка поиска> LIKE < шаблон поиска>
Если шаблон поиска присутствует то True, иначе False.

В пустой строке нет пробелов, пустая строка есть в любой (не нулевой) строке.
Кстати понятие NULL в чистом ввиде здесь обламывается.

KO
...
Рейтинг: 0 / 0
13.07.2012, 12:16
    #37877912
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
Mnior, ну вот взяли и все разжевали, не оставили человеку возможности почитать про куммутативность и подумать.
...
Рейтинг: 0 / 0
13.07.2012, 12:25
    #37877940
для тупых
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
не, тупые в курсе про коммутативность, у них даже 5 по алгебре.
тупые юзали LIKE неск. лет, но только сегодня поняли, что думали наоборот о том, что во что включается.
т.е, меня вдруг переклинило вот так: 'абракадабра' like 'а%'? да.
кто куда включен? 'абракадабра' включена во множество, определяемое шаблоном 'а%'.
и таки да, пустая строка включена в любую, ну так значит должно быть наоборот: '' like ' '
проверяю. как бы не так. срабатывает обратное, как написал iap .
вот тут и начался маразм.
...
Рейтинг: 0 / 0
13.07.2012, 12:28
    #37877948
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
для тупых,

слева - где ищем
справа - что ищем
'' like ' ' (в пустой строке ищем пробел) не должно срабатывать, а ' ' like '' - должно
...
Рейтинг: 0 / 0
13.07.2012, 12:33
    #37877961
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
для тупыхне, тупые в курсе про коммутативность, у них даже 5 по алгебре.
тупые юзали LIKE неск. лет, но только сегодня поняли, что думали наоборот о том, что во что включается.
т.е, меня вдруг переклинило вот так: 'абракадабра' like 'а%'? да.
кто куда включен? 'абракадабра' включена во множество, определяемое шаблоном 'а%'.
и таки да, пустая строка включена в любую, ну так значит должно быть наоборот: '' like ' '
проверяю. как бы не так. срабатывает обратное, как написал iap .
вот тут и начался маразм.Если хвостовые пробелы в шаблоне LIKE, то они никуда не деваются при сравнении.
А перед сравнением оператором "=" - отбрасываются.
Причём с этим бесполезно бороться. Уже столько тем про это на форуме было...

Как мило шутит Microsoft, "By design"!
...
Рейтинг: 0 / 0
13.07.2012, 12:41
    #37877973
для тупых
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
Shakill,

вот да, в терминологии кого и где ищем мне понятно. а со включением переклинило.
спасибо разъясняющим для тупых!

iap,
про сравнение с отбрасыванием - это же одни из первых грабель, невозможно не наступить,
про like с пробелами даже никогда в голову не приходило, т.к. правильно работает.
убило именно осмысление LIKE на этом примере
...
Рейтинг: 0 / 0
13.07.2012, 12:58
    #37878032
daw
daw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
> В пустой строке нет пробелов, пустая строка есть в любой (не нулевой) строке.

ненене!
поиск пустой строки в строке - это шаблон '%%', а не ''.
а то, что для varchar не учитываются концевые
пробелы в строке, для которой проверяется шаблон, это
надо просто запомнить.

для Nvarchar, кстати, учитываются.

Код: sql
1.
2.
if N'   ' like N''
   print '!'


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.07.2012, 13:07
    #37878057
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
dawдля Nvarchar, кстати, учитываются.
ничего себе. итого имеем:
Код: sql
1.
2.
3.
4.
if '   '  like ''  print '1'    -- да  
if '   '  = ''     print '2'    -- да
if N'   ' like N'' print '3'    -- нет
if N'   ' = N''    print '4'    -- да


не могу сформулировать принцип действия :(
...
Рейтинг: 0 / 0
13.07.2012, 13:09
    #37878061
Ivan Durak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
iapКак мило шутит Microsoft, "By design"!
Ха, у МС хотябы пустая строка не эквивалента NULL, в отличии от некоторых, не будем показывать пальцем, субд
...
Рейтинг: 0 / 0
13.07.2012, 13:14
    #37878072
Ivan Durak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
Shakilldawдля Nvarchar, кстати, учитываются.
ничего себе. итого имеем:
Код: sql
1.
2.
3.
4.
if '   '  like ''  print '1'    -- да  
if '   '  = ''     print '2'    -- да
if N'   ' like N'' print '3'    -- нет
if N'   ' = N''    print '4'    -- да


не могу сформулировать принцип действия :(
неявное преобразование чтоли....
но вообще-то нварчар работает так же как и варчар

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
declare @v1 nvarchar(5), @v2 nvarchar(5)
select @v1 = N'   ', @v2 = N''

if @v1 = @v2 print '1'    -- да  

declare @v3 varchar(5), @v4 varchar(5)
select @v3 = '   ', @v4 = ''

if @v3 = @v4 print '2'    -- да  
...
Рейтинг: 0 / 0
13.07.2012, 13:16
    #37878077
Ivan Durak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
ошибся, этож лайки а не =.... да хм.... фича !!
...
Рейтинг: 0 / 0
13.07.2012, 13:19
    #37878086
CSV_NULL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
Ivan DurakiapКак мило шутит Microsoft, "By design"!
Ха, у МС хотябы пустая строка не эквивалента NULL, в отличии от некоторых, не будем показывать пальцем, субд
зато если результаты запроса сохранять как csv,
NULL записывается не пустым местом, а строкой 'NULL'.
очень мило, когда нарываешься в первый раз.
...
Рейтинг: 0 / 0
13.07.2012, 13:36
    #37878130
daw
daw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
> не могу сформулировать принцип действия :(

для сравнения с помощью = концевые пробелы не учитываются никогда.
в BOL можно найти здесь
http://msdn.microsoft.com/en-us/library/ms191529(v=sql.105).aspx
BOLTrailing blanks are ignored in comparisons; for example, these are equivalent:

но, собственно, это и требование стандарта (сформулировано несколько иначе, но результат тот же):
<comparison predicate>

If the length in characters of X is not equal to the length in characters of Y, then the shorter string is
effectively replaced, for the purposes of comparison, with a copy of itself that has been extended to
the length of the longer string by concatenation on the right of one or more pad characters, where the
pad character is chosen based on CS. If CS has the NO PAD characteristic, then the pad character is
an implementation-dependent character different from any character in the character set of X and Y
that collates less than any string under CS. Otherwise, the pad character is a <space>.


для like расписано в статье про like.
http://msdn.microsoft.com/en-us/library/ms179859.aspx
BOLWhen you perform string comparisons by using LIKE, all characters in the pattern string are significant. This includes
leading or trailing spaces. If a comparison in a query is to return all rows with a string LIKE 'abc ' (abc followed by
a single space), a row in which the value of that column is abc (abc without a space) is not returned. However, trailing
blanks, in the expression to which the pattern is matched, are ignored. If a comparison in a query is to return all rows
with the string LIKE 'abc' (abc without a space), all rows that start with abc and have zero or more trailing blanks are
returned.

....

LIKE supports ASCII pattern matching and Unicode pattern matching. When all arguments (match_expression, pattern, and
escape_character, if present) are ASCII character data types, ASCII pattern matching is performed. If any one of the
arguments are of Unicode data type, all arguments are converted to Unicode and Unicode pattern matching is performed.
When you use Unicode data (nchar or nvarchar data types) with LIKE, trailing blanks are significant; however, for
non-Unicode data, trailing blanks are not significant. Unicode LIKE is compatible with the ISO standard. ASCII LIKE is
compatible with earlier versions of SQL Server.


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.07.2012, 13:43
    #37878144
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробел равен пустой строке
dawWhen you use Unicode data (nchar or nvarchar data types) with LIKE, trailing blanks are significant; however, for
non-Unicode data, trailing blanks are not significant. Unicode LIKE is compatible with the ISO standard. ASCII LIKE is
compatible with earlier versions of SQL Server.

вот этот абзац не заметил, его и достаточно. просто придется запомнить
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / пробел равен пустой строке / 25 сообщений из 27, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]