powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Маска SQL
14 сообщений из 14, страница 1 из 1
Маска SQL
    #39907777
Anastasia99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как написать маску для "Названия корпуса" тип данных nvarchar(5). Первая буква заглавная, вторая цифра.
...
Рейтинг: 0 / 0
Маска SQL
    #39907800
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
LIKE N'[А-Я][0-9]%' COLLATE Cyrillic_General_BIN
...
Рейтинг: 0 / 0
Маска SQL
    #39907801
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите, вспомнил, что корректнее так:
Код: sql
1.
LIKE N'[А-Я][0-9]%' COLLATE Cyrillic_General_BIN2
...
Рейтинг: 0 / 0
Маска SQL
    #39907816
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Маска SQL
    #39907841
Anastasia99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
entrypoint,

А как сделать, чтобы цифра была необязательна?
...
Рейтинг: 0 / 0
Маска SQL
    #39907844
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Маска SQL
    #39907877
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему-то в А-Я всегда забывают Ё прописать. Ё-фобия?
...
Рейтинг: 0 / 0
Маска SQL
    #39907897
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Руслан Дамирович,

Пож

Код: sql
1.
WHERE [Названия корпуса] LIKE '[A-ZА-ЯЁ]%' COLLATE Cyrillic_General_BIN;
...
Рейтинг: 0 / 0
Маска SQL
    #39907901
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан Дамирович
Почему-то в А-Я всегда забывают Ё прописать. Ё-фобия?
Потому что буква Ё по своему коду находится за пределами диапазона [А-Я].
Выполните:
Код: 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
Маска SQL
    #39907931
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я и не спрашивал :) просто почему-то забывают, что Ё не входит в диапазон. Так что лучше уж CI_AI

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

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

А ТС хочет регулярки в SQL, а это уже магия CLR.
CI_AI тоже ничего не гарантирует в плане диапазонов.
...
Рейтинг: 0 / 0
Маска SQL
    #39908438
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Маска SQL
    #39908442
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан Дамирович
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
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Маска SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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