Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 хеш строки  [new]
нуб987
Guest
нужно создать короткий ключ для текстовых строк nvarchar(100)
придумал так: номер символа * его код.
допустим, строка: 'ABCD' получит такой хеш: 1*65 + 2*66 + 3*67 + 4*68 = 670

но не придумал, как сделать короткую формулу всего этого. В частности, возможно ли средствами СКЛя разбить строку на строки? Т.е. чтобы строка 'ABCD' стала:
A
B
C
D
6 ноя 16, 03:55    [19862044]     Ответить | Цитировать Сообщить модератору
 Re: хеш строки  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6202
HASHBYTES
6 ноя 16, 04:49    [19862060]     Ответить | Цитировать Сообщить модератору
 Re: хеш строки  [new]
нуб987
Guest
Сон Веры Павловны, забыл уточнить, что это для СКЛ2000
там нет хешей
есть checksum(), но для похожих значений возвращаются одинаковые результаты
7 ноя 16, 03:17    [19863905]     Ответить | Цитировать Сообщить модератору
 Re: хеш строки  [new]
нуб987
Guest
да и HASHBYTES возвращает слишком длинные результаты. Хотелось бы чего-то покороче.
Потом эти ключи будут использоваться в ссылках на web-страницах
7 ноя 16, 03:19    [19863907]     Ответить | Цитировать Сообщить модератору
 Re: хеш строки  [new]
aleks2
Guest
Тупо и прямолинейно пронумеруйте свои строки.
Можно identity.

И не парьте отсутствующий мозг.
7 ноя 16, 06:43    [19863944]     Ответить | Цитировать Сообщить модератору
 Re: хеш строки  [new]
нуб987
Guest
aleks2
Тупо и прямолинейно пронумеруйте свои строки.
Можно identity.

И не парьте отсутствующий мозг.

ну у некоторых он все-таки есть

задача стояла написать типа формулой одним запросом
11 ноя 16, 16:17    [19884048]     Ответить | Цитировать Сообщить модератору
 Re: хеш строки  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
нуб987,

считайте хэш на клиенте и передавайте на сервер при создании записи.
11 ноя 16, 16:38    [19884142]     Ответить | Цитировать Сообщить модератору
 Re: хеш строки  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
нуб987
есть checksum(), но для похожих значений возвращаются одинаковые результаты
declare @s1 varchar(30) = 'ABCD', @s2 varchar(30) = 'abcd';

select
 checksum(@s1 collate Cyrillic_General_CI_AI),
 checksum(@s2 collate Cyrillic_General_CI_AI),
 checksum(@s1 collate Cyrillic_General_CS_AI),
 checksum(@s2 collate Cyrillic_General_CS_AI),
 checksum(@s1 collate Cyrillic_General_BIN),
 checksum(@s2 collate Cyrillic_General_BIN),
 binary_checksum(@s1 collate Cyrillic_General_CI_AI),
 binary_checksum(@s2 collate Cyrillic_General_CI_AI);
11 ноя 16, 16:48    [19884186]     Ответить | Цитировать Сообщить модератору
 Re: хеш строки  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
invm
нуб987
есть checksum(), но для похожих значений возвращаются одинаковые результаты
declare @s1 varchar(30) = 'ABCD', @s2 varchar(30) = 'abcd';

select
 checksum(@s1 collate Cyrillic_General_CI_AI),
 checksum(@s2 collate Cyrillic_General_CI_AI),
 checksum(@s1 collate Cyrillic_General_CS_AI),
 checksum(@s2 collate Cyrillic_General_CS_AI),
 checksum(@s1 collate Cyrillic_General_BIN),
 checksum(@s2 collate Cyrillic_General_BIN),
 binary_checksum(@s1 collate Cyrillic_General_CI_AI),
 binary_checksum(@s2 collate Cyrillic_General_CI_AI);
Как вариант, фигачить checksum для подстрок по поределенному алгоритму, и как-то их джоинить.
(согласен, решение идиотское).
Для MSSQL2000 есть очень доходчивый мануал написания XP (eXtended Procedures)
Можно подложить свою DLL, там реализовать что хошь, и подлинковать как XP.
13 ноя 16, 01:32    [19887315]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить