|
LIKE '%[a-z]%'
|
|||
---|---|---|---|
#18+
Всем добрый день! Свалился код из-за странного (на первый взгляд) поведения оператора LIKE: Код: sql 1. 2. 3. 4.
Результат - 1. Где собака зарыта? Collation базы Cyrillic_General_CS_AS. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 16:56 |
|
LIKE '%[a-z]%'
|
|||
---|---|---|---|
#18+
Tketano, Понятно, это такой веселый прикол в collation... Бред. Видимо чье-то мнение, что N и № похожие символы. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 17:06 |
|
LIKE '%[a-z]%'
|
|||
---|---|---|---|
#18+
Поэтому надёжнее не использовать диапазон, а просто явно перечислить символы, тем более их всего 26. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 19:23 |
|
LIKE '%[a-z]%'
|
|||
---|---|---|---|
#18+
Tketano, да, весёлый collation, № находится между N и O. Надо запомнить. И символ tm в этом же ряду. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 21:05 |
|
LIKE '%[a-z]%'
|
|||
---|---|---|---|
#18+
Владислав Колосов Tketano, да, весёлый collation, № находится между N и O. Надо запомнить. И символ tm в этом же ряду. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 22:54 |
|
LIKE '%[a-z]%'
|
|||
---|---|---|---|
#18+
Tketano, А вот так работает =) Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2020, 01:49 |
|
LIKE '%[a-z]%'
|
|||
---|---|---|---|
#18+
Marat2020 Tketano, А вот так работает =) Ну, collation другой. Но с этим collation 1 выдаст вот такое: Код: sql 1. 2. 3. 4.
https://collation-charts.org/mssql/mssql.0409.1252.Latin1_General_CI_AI.html (для версии 100 там страницы нет, но приведённое по ссылке мало отличается от неё). Поэтому, как было сказано выше, диапазоны лучше не использовать. движок форума не дает нужный символ вставить - там перед LIKE символ, как N, но с тильдой сверху. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2020, 03:28 |
|
LIKE '%[a-z]%'
|
|||
---|---|---|---|
#18+
Сон Веры Павловны Поэтому, как было сказано выше, диапазоны лучше не использовать. А я не спорю. Просто вдруг человеку всё-таки захочется использовать именно диапазоны. И да версия 100, это просто скопипастил что под руку подвернулось. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2020, 03:43 |
|
LIKE '%[a-z]%'
|
|||
---|---|---|---|
#18+
Marat2020 Tketano, А вот так работает =) Код: sql 1. 2. 3. 4.
Код: sql 1. 2. 3. 4.
У вас в примере где-то неявная конвертация символа, возможно при передаче запроса серверу из SSMS. Ну или юникодные коллейты по-другому устроены, нежели ASCII-шные. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2020, 04:28 |
|
LIKE '%[a-z]%'
|
|||
---|---|---|---|
#18+
Ага, кажется дошло. Когда вы указываете ascii-литералы, ну или поле таблицы не юникодное, то сиквел отбрасывает / заменяет символы, отсутствующие в кодовой странице, на "эквивалентные" (ну или знак вопроса, если таковых не имеется). Причем делает он это, основываясь на дефолтном коллейшне базы, если это литерал, или поля таблицы, если это таблица. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Если вы поиграетесь с этим кодом на базах с разным коллейшном (Cyrillic / Latin1), отбрасывая юникодный N перед кавычками внутри table value constructor, то вы увидите, что на Latin1 номер превращается в знак вопроса, а на Cyrillic энье превращается в обычную N. В общем, если у вас только кириллица, то подобрать вариант наверное можно, но если база действительно мультиязычная, то использовать интервалы в LIKE просто не получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2020, 06:26 |
|
LIKE '%[a-z]%'
|
|||
---|---|---|---|
#18+
alexeyvg Надо же, какая логика, интересно? Почему то комитет по стандартизации решил, что в алфавитном указатели в книге № находится между N и O, обывательской логике это неподвластно. Видимо они консервативны. Символ № это буквы «No», которые ранее именно так и указывались, но со временем выделились в специальный знак. Символы № и ™ относятся к буквам, потому что исторически это были именно обычные буквы. А вот символы © и ® к буквам не относятся. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2020, 11:31 |
|
LIKE '%[a-z]%'
|
|||
---|---|---|---|
#18+
Коллеги, всем спасибо за обсуждение) Ответ понятен. В итоге отказался от диапазона в пользу явного перечисления англорусского алфавита и цифр. Интересно regular expressions еще на других платформах потестить (типа .net) с текущим и инвариантным CultureInfo. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2020, 12:34 |
|
LIKE '%[a-z]%'
|
|||
---|---|---|---|
#18+
Alibek B. alexeyvg Надо же, какая логика, интересно? Почему то комитет по стандартизации решил, что в алфавитном указатели в книге № находится между N и O, обывательской логике это неподвластно. Видимо они консервативны. Символ № это буквы «No», которые ранее именно так и указывались, но со временем выделились в специальный знак. Символы № и ™ относятся к буквам, потому что исторически это были именно обычные буквы. А вот символы © и ® к буквам не относятся. Сейчас все без исключения пользователи\заказчики возмущаются, видя результат такой интерпретации, а программисты, ругаясь, перечисляют буквы, вместо того, чтобы использовать специально придуманную конструкцию a-z, которая оказалась выброшенной господами из Юникода на помойку. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2020, 19:14 |
|
LIKE '%[a-z]%'
|
|||
---|---|---|---|
#18+
Tketano Коллеги, всем спасибо за обсуждение) Ответ понятен. В итоге отказался от диапазона в пользу явного перечисления англорусского алфавита и цифр. Интересно regular expressions еще на других платформах потестить (типа .net) с текущим и инвариантным CultureInfo. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2020, 19:14 |
|
LIKE '%[a-z]%'
|
|||
---|---|---|---|
#18+
Возможно в regexp есть подходящий класс символов (вместо диапазона). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 16:56 |
|
LIKE '%[a-z]%'
|
|||
---|---|---|---|
#18+
alexeyvg Tketano Коллеги, всем спасибо за обсуждение) Ответ понятен. В итоге отказался от диапазона в пользу явного перечисления англорусского алфавита и цифр. Интересно regular expressions еще на других платформах потестить (типа .net) с текущим и инвариантным CultureInfo. Нет, не так. По крайней мере, в дотнете: The syntax for specifying a range of characters is as follows: [firstCharacter-lastCharacter] where firstCharacter is the character that begins the range and lastCharacter is the character that ends the range. A character range is a contiguous series of characters defined by specifying the first character in the series, a hyphen (-), and then the last character in the series. Two characters are contiguous if they have adjacent Unicode code points. firstCharacter must be the character with the lower code point, and lastCharacter must be the character with the higher code point. ( https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions ) - соответственно, Код: powershell 1. 2. 3.
выводит Код: plaintext 1. 2. 3. 4. 5.
Alibek B. Возможно в regexp есть подходящий класс символов (вместо диапазона). Есть категория юникода L, и класс p{} (категория/блок юникода) (см. вышеприведенную ссылку). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 19:11 |
|
|
start [/forum/topic.php?fid=46&fpage=51&tid=1685766]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 246ms |
total: | 378ms |
0 / 0 |