Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Маска SQL / 14 сообщений из 14, страница 1 из 1
25.12.2019, 11:01
    #39907777
Anastasia99
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска SQL
Как написать маску для "Названия корпуса" тип данных nvarchar(5). Первая буква заглавная, вторая цифра.
...
Рейтинг: 0 / 0
25.12.2019, 11:25
    #39907800
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска SQL
Код: sql
1.
LIKE N'[А-Я][0-9]%' COLLATE Cyrillic_General_BIN
...
Рейтинг: 0 / 0
25.12.2019, 11:26
    #39907801
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска SQL
Простите, вспомнил, что корректнее так:
Код: sql
1.
LIKE N'[А-Я][0-9]%' COLLATE Cyrillic_General_BIN2
...
Рейтинг: 0 / 0
25.12.2019, 11:46
    #39907816
entrypoint
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска SQL
Anastasia99,

Юникод, маску расширяем под язык

в данном случае

  • английский
  • русский
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
DECLARE @t AS TABLE ([Названия корпуса] NVARCHAR(5), lang CHAR(4))

INSERT INTO @t ([Названия корпуса], lang)
SELECT '111',	 'Англ' UNION ALL 
SELECT 'a11',	 'Англ' UNION ALL 
SELECT 'A11',	 'Англ' UNION ALL 
SELECT '2a11',	 'Англ' UNION ALL 
SELECT '2A11',	 'Англ' UNION ALL 
SELECT 'ф11',	 'Рус'  UNION ALL 
SELECT 'Ф11',	 'Рус'  UNION ALL 
SELECT '2ф11',	 'Рус'  UNION ALL 
SELECT '2Ф11',	 'Рус'  

SELECT 
       [Названия корпуса]
     , lang
FROM 
     @t
WHERE [Названия корпуса] LIKE '[A-ZА-Я][0-9]%' COLLATE Cyrillic_General_BIN;



вариант с чешским языком
...
Рейтинг: 0 / 0
25.12.2019, 12:23
    #39907841
Anastasia99
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска SQL
entrypoint,

А как сделать, чтобы цифра была необязательна?
...
Рейтинг: 0 / 0
25.12.2019, 12:28
    #39907844
entrypoint
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска SQL
Anastasia99,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
DECLARE @t AS TABLE ([Названия корпуса] NVARCHAR(5), lang CHAR(4))

INSERT INTO @t ([Названия корпуса], lang)
SELECT '111',	 'Англ' UNION ALL 
SELECT 'a11',	 'Англ' UNION ALL 
SELECT 'A11',	 'Англ' UNION ALL 
SELECT '2a11',	 'Англ' UNION ALL 
SELECT '2A11',	 'Англ' UNION ALL 
SELECT 'ф11',	 'Рус'  UNION ALL 
SELECT 'Ф11',	 'Рус'  UNION ALL 
SELECT '2ф11',	 'Рус'  UNION ALL 
SELECT '2Ф11',	 'Рус'  

SELECT 
       [Названия корпуса]
     , lang
FROM 
     @t
WHERE [Названия корпуса] LIKE '[A-ZА-Я]%' COLLATE Cyrillic_General_BIN;
...
Рейтинг: 0 / 0
25.12.2019, 13:35
    #39907877
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска SQL
Почему-то в А-Я всегда забывают Ё прописать. Ё-фобия?
...
Рейтинг: 0 / 0
25.12.2019, 14:11
    #39907897
entrypoint
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска SQL
Руслан Дамирович,

Пож

Код: sql
1.
WHERE [Названия корпуса] LIKE '[A-ZА-ЯЁ]%' COLLATE Cyrillic_General_BIN;
...
Рейтинг: 0 / 0
25.12.2019, 14:18
    #39907901
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска SQL
Руслан Дамирович
Почему-то в А-Я всегда забывают Ё прописать. Ё-фобия?
Потому что буква Ё по своему коду находится за пределами диапазона [А-Я].
Выполните:
Код: sql
1.
2.
3.
SELECT number,NCHAR(number) COLLATE Cyrillic_General_BIN
FROM master.dbo.spt_values
WHERE type='P' AND number BETWEEN 32 AND 1025 ORDER BY number;

и убедитесь в этом (UNICODE 1025 - это как раз Ё).
Поэтому я сам всегда пишу [АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫьЭЮЯ] . Не верю я этим диапазонам!
С другим COLLATE буквы занимают уже другие места при сортировке...

entrypoint, речь тут идёт о UNICODE, а значит, перед строками надо писать букву N
По поводу BIN и BIN2. Здесь лет так 10 назад было несколько тем, где обсуждался глюк Cyrillic_General_BIN,
из-за которого первый символ рассматривался как два однобайтовых, хоть и для юникода. Не знаю, может на сегодня это исправили...

Anastasia99
А как сделать, чтобы цифра была необязательна?
Ну, не писать на второй позиции в LIKE ничего. Так не работает?
...
Рейтинг: 0 / 0
25.12.2019, 15:27
    #39907931
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска SQL
Так я и не спрашивал :) просто почему-то забывают, что Ё не входит в диапазон. Так что лучше уж CI_AI

А ТС хочет регулярки в SQL, а это уже магия CLR.
...
Рейтинг: 0 / 0
26.12.2019, 13:41
    #39908427
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска SQL
Anastasia99,

проще всего это сделать с помощью CRL функции регулярных выражений. Поищите на просторах интернета.
...
Рейтинг: 0 / 0
26.12.2019, 13:46
    #39908431
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска SQL
Руслан Дамирович
Так я и не спрашивал :) просто почему-то забывают, что Ё не входит в диапазон. Так что лучше уж CI_AI

А ТС хочет регулярки в SQL, а это уже магия CLR.
CI_AI тоже ничего не гарантирует в плане диапазонов.
...
Рейтинг: 0 / 0
26.12.2019, 13:53
    #39908438
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска SQL
iap
CI_AI тоже ничего не гарантирует в плане диапазонов.


В случае с Ё вполне прокатывает (по крайней мере для меня)...
Код: sql
1.
SELECT CASE WHEN 'ё' COLLATE Cyrillic_General_CI_AI LIKE '[а-я]' COLLATE Cyrillic_General_CI_AI THEN 1 ELSE 0 END
...
Рейтинг: 0 / 0
26.12.2019, 13:58
    #39908442
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска SQL
Руслан Дамирович
iap
CI_AI тоже ничего не гарантирует в плане диапазонов.


В случае с Ё вполне прокатывает (по крайней мере для меня)...
Код: sql
1.
SELECT CASE WHEN 'ё' COLLATE Cyrillic_General_CI_AI LIKE '[а-я]' COLLATE Cyrillic_General_CI_AI THEN 1 ELSE 0 END

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


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