powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / LIKE
27 сообщений из 27, показаны все 2 страниц
LIKE
    #40053594
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему результаты разные?

SELECT 1 WHERE N'🙋🏻‍' NOT LIKE N'[აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰ]'
SELECT 1 WHERE N'🙋🏻‍' LIKE N'[^აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰ]'



-----------
1

(строк обработано: 1)


-----------

(строк обработано: 0)

Из текста выдираются слова (рекурсивно, в CTE). Начало слова — символ грузинского алфавита, конец — любой другой.
Сам текст из чата Телеграмма. Ну т.е. в нем встречаются эмодзи и т.п. И вот не понимаю, почему некоторые сервер ожидаемо считает не символами грузинского алфавита, а некоторые — считает.
...
Рейтинг: 0 / 0
LIKE
    #40053597
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.
...
Рейтинг: 0 / 0
LIKE
    #40053600
MoonRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Smile
Почему результаты разные?

потому что разные условия запросов, так и должно быть по идее
...
Рейтинг: 0 / 0
LIKE
    #40053602
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MoonRabbit, а в чем разные?
...
Рейтинг: 0 / 0
LIKE
    #40053609
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MoonRabbit,
странно, тут тоже "разные"
Код: sql
1.
2.
SELECT 1 WHERE '1' not like '[023456789]'
SELECT 1 WHERE '1' like '[^023456789]'




но результат один и тот же



-----------
1

(строк обработано: 1)


-----------
1

(строк обработано: 1)
...
Рейтинг: 0 / 0
LIKE
    #40053613
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
SELECT 1 WHERE '1' not like '[023456789]'
SELECT 1 WHERE '1' not like '[^023456789]'
...
Рейтинг: 0 / 0
LIKE
    #40053620
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

SELECT 1 WHERE N'🙋🏻‍' NOT LIKE N'[აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰ]'
SELECT 1 WHERE N'🙋🏻‍' LIKE N'[ ^ აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰ]'


Microsoft SQL Server 2012 (SP2-GDR) (KB3194719) - 11.0.5388.0 (X64)
Sep 23 2016 16:56:29
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.3 <X64> (Build 19042: )
...
Рейтинг: 0 / 0
LIKE
    #40053623
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни одного грузина на форуме? =)
...
Рейтинг: 0 / 0
LIKE
    #40053625
MoonRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Smile
MoonRabbit,
странно, тут тоже "разные"
Код: sql
1.
2.
SELECT 1 WHERE '1' not like '[023456789]'
SELECT 1 WHERE '1' like '[^023456789]'




но результат один и тот же



-----------
1

(строк обработано: 1)


-----------
1

(строк обработано: 1)

по сути разные запросы
грубо говоря
первый запрос показывает результат когда условие не содержит определенный текст
второй запрос показывает результат когда первая буква не содержится в наборе последующих указанных
так по моему, пусть гуру подтвердят
...
Рейтинг: 0 / 0
LIKE
    #40053634
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MoonRabbit,

А так тоже разные?

SELECT 1 WHERE '1' not like '[0]'
SELECT 1 WHERE '1' like '[^0]'
...
Рейтинг: 0 / 0
LIKE
    #40053643
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT UNICODE(N'🙋🏻‍'), UNICODE(N'ა'), UNICODE(N'ჰ')


----------- ----------- -----------
55357 4304 4336

(строк обработано: 1)
...
Рейтинг: 0 / 0
LIKE
    #40053835
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этор с грузинскими символами вообще никак не связано - замени их на латиницу и будет то же самое. Похоже, что дело тут в том, что 🙋🏻‍ это не обычный символ, а "суррогатная пара". Типа как два символа подряд, которые в тексте превращаются в один.
...
Рейтинг: 0 / 0
LIKE
    #40053859
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

да, вот этот пример меня добил окончательно

SELECT 1 WHERE N'🙋🏻‍' LIKE N'[1]'
SELECT 1 WHERE N'🙋🏻‍' LIKE N'[^1]'

погуглил уже про суррогатные пары в целом (типа про добавления цвета кожи к эмодзи и т.п. — забавно), но пока не очень понимаю, как с этим работать в применении к LIKE, и почем в общем-то во всех выше перечисленных примера сервер ведет себя именно так =(

Ну и что, что суррогатная, почему она совпадает с другим символом? Причем это проявляется только там, где перечисление начинается с ^. Вот например все то же

SELECT 1 WHERE N'🙋🏻‍' NOT LIKE N'[1]'
SELECT 1 WHERE N'🙋🏻‍' LIKE N'[^1]'


-----------
1

(строк обработано: 1)


-----------

(строк обработано: 0)


Реальная строка кода такая

CROSS APPLY (SELECT PATINDEX(N'%[^აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰ]%', SUBSTRING([str], start_pos, l - start_pos))-1 + start_pos-1 end_pos) end_pos

Ну т.е. NOT LIKE меня тут не спасет. Ну или все совсем переписывать =))
...
Рейтинг: 0 / 0
LIKE
    #40053860
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и потом, говорить, что

SELECT 1 WHERE N'🙋🏻‍' NOT LIKE N'[1]'

сервер обрабатывает корректно, при тех результатах, что он выдает на это

SELECT 1 WHERE N'🙋🏻‍' LIKE N'[^1]'

как-то совсем стремно
...
Рейтинг: 0 / 0
LIKE
    #40053863
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,


SELECT NCHAR(0xD83D) + NCHAR(0xDE4B)


----
🙋

(строк обработано: 1)

Ну и

SELECT 1 WHERE N'🙋🏻‍' LIKE N'[^აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰ]'

разумеется работать не будет, так перед лайк по сути два символа. Да, уж

https://qastack.ru/dba/139551/how-do-i-set-a-sql-server-unicode-nvarchar-string-to-an-emoji-or-supplementary
...
Рейтинг: 0 / 0
LIKE
    #40053896
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Smile, а если попробовать добавить знак процента в конец и добаить колейшен collate Latin1_General_100_BIN2

ЗЫЖ не вставляется по нормальному строка
...
Рейтинг: 0 / 0
LIKE
    #40053913
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно поинтересоваться - что вообще за задача такая странная?
...
Рейтинг: 0 / 0
LIKE
    #40053914
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot
а если попробовать добавить знак процента в конец и добаить колейшен collate Latin1_General_100_BIN2


Вот так, похоже, и вправду работает:
Код: sql
1.
SELECT 1 WHERE N'&#128587;&#127995;&#8205;' LIKE N'[^1]%' collate Latin1_General_100_BIN2



Какая-то хрень тоже со вставкой. Но, все поняли, я думаю.
...
Рейтинг: 0 / 0
LIKE
    #40053954
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
А можно поинтересоваться - что вообще за задача такая странная?

Почему странная? =))

Есть чат, нужно по нему составить частотный словарь слов. Из телеги штатными средствами делаю экспорт истории чата в JSON.
Фильтрую его, оставляя только строки с текстами сообщений. Далее, заливаю его в табличку, и запросом бью на слова, потом делаю группировку слов, считаю.

Все работало. Пока не попались эмодзи.
...
Рейтинг: 0 / 0
LIKE
    #40053957
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Smile
fkthat
А можно поинтересоваться - что вообще за задача такая странная?

Почему странная? =))

Есть чат, нужно по нему составить частотный словарь слов. Из телеги штатными средствами делаю экспорт истории чата в JSON.
Фильтрую его, оставляя только строки с текстами сообщений. Далее, заливаю его в табличку, и запросом бью на слова, потом делаю группировку слов, считаю.

Все работало. Пока не попались эмодзи.

Все эти вещи делаются любым готовым FTS-движком. Зачем колеса изобретать.
...
Рейтинг: 0 / 0
LIKE
    #40053958
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот я жду здесь 7 в end_pos, а оно 0

SELECT
PATINDEX(N'%[აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰ]%', N'სიტყვა🙋🏻‍') 'start_pos',
PATINDEX(N'%[^აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰ]%', N'სიტყვა🙋🏻‍') 'end_pos'

start_pos end_pos
----------- -----------
1 0

на ум пока приходит считать концом слова любой символ, код которого не входит в диапазон ა-ჰ.
Код, конечно, можно переписать, но хочется разобраться с LIKE/PATINDEX
...
Рейтинг: 0 / 0
LIKE
    #40053962
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Smile
Вот я жду здесь 7 в end_pos, а оно 0

SELECT
PATINDEX(N'%[აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰ]%', N'სიტყვა🙋🏻‍') 'start_pos',
PATINDEX(N'%[^აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰ]%', N'სიტყვა🙋🏻‍') 'end_pos'

start_pos end_pos
----------- -----------
1 0



Код: sql
1.
2.
3.
SELECT
PATINDEX(N'%[qqq]%', N'qqq'  collate Latin1_General_100_BIN2) 'start_pos',
PATINDEX(N'%[^qqq]%', N'qqq' collate Latin1_General_100_BIN2)  'end_pos' 



1 7
...
Рейтинг: 0 / 0
LIKE
    #40053979
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Smile
Ни одного грузина на форуме? =)


Тут таджыки Манижы нужны, с мифической фиографией, как на Евровидение
...
Рейтинг: 0 / 0
LIKE
    #40053989
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Smile
MoonRabbit,

А так тоже разные?

SELECT 1 WHERE '1' not like '[0]'
SELECT 1 WHERE '1' like '[^0]'


не уверен что msd sql с регулярками работает [^0]
...
Рейтинг: 0 / 0
LIKE
    #40054001
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
monstrU
Smile
MoonRabbit,

А так тоже разные?

SELECT 1 WHERE '1' not like '[0]'
SELECT 1 WHERE '1' like '[^0]'


не уверен что msd sql с регулярками работает [^0]


msd sql не работает
...
Рейтинг: 0 / 0
LIKE
    #40054077
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT
PATINDEX(N'%[ქწერტყუიოპლკჯჰგფდსაზხცვბნმჭღთჟშძჩ]%', N'სიტყვა🙋🏻‍' COLLATE Latin1_General_100_CI_AS_SC) start_pos,
PATINDEX(N'%[^ქწერტყუიოპლკჯჰგფდსაზხცვბნმჭღთჟშძჩ]%', N'სიტყვა🙋🏻‍' COLLATE Latin1_General_100_CI_AS_SC)-1 end_pos

SELECT
PATINDEX(N'%[ქწერტყუიოპლკჯჰგფდსაზხცვბნმჭღთჟშძჩ]%', N'🙋🏻‍სიტყვა🙋🏻‍' COLLATE Latin1_General_100_CI_AS_SC) start_pos,
SUBSTRING(N'🙋🏻‍სიტყვა🙋🏻‍', PATINDEX(N'%[ქწერტყუიოპლკჯჰგფდსაზხცვბნმჭღთჟშძჩ]%', N'🙋🏻‍სიტყვა🙋🏻‍' COLLATE Latin1_General_100_CI_AS_SC)+1, 100) substr


start_pos end_pos
----------- -----------
1 6


start_pos substr
----------- ----------------
4 ‍სიტყვა🙋🏻‍


ура.
...
Рейтинг: 0 / 0
LIKE
    #40054417
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Smile

ура.


я бы не радовался раньше времени, тут был чистый подгон

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


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