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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
пробел равен пустой строке
    #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
пробел равен пустой строке
    #37878061
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapКак мило шутит Microsoft, "By design"!
Ха, у МС хотябы пустая строка не эквивалента NULL, в отличии от некоторых, не будем показывать пальцем, субд
...
Рейтинг: 0 / 0
пробел равен пустой строке
    #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
пробел равен пустой строке
    #37878077
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибся, этож лайки а не =.... да хм.... фича !!
...
Рейтинг: 0 / 0
пробел равен пустой строке
    #37878086
CSV_NULL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan DurakiapКак мило шутит Microsoft, "By design"!
Ха, у МС хотябы пустая строка не эквивалента NULL, в отличии от некоторых, не будем показывать пальцем, субд
зато если результаты запроса сохранять как csv,
NULL записывается не пустым местом, а строкой 'NULL'.
очень мило, когда нарываешься в первый раз.
...
Рейтинг: 0 / 0
пробел равен пустой строке
    #37878130
Фотография 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
пробел равен пустой строке
    #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
25 сообщений из 27, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / пробел равен пустой строке
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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