SQL serverdagi chin harflari bilan NVARCHAR ustunining mazmunini aralashtiradigan usulni yaratishim mumkinmi?

Menda minglab qatorli stol bor. Men shuni qilmoqchimanki, foydalanuvchi o'z vaqtida ushbu guruhni tanlashi mumkin.

Xitoy belgilarining (code asvari funktsiyasiga o'xshash tarzda) NVARCHAR ustunidan xash funktsiyasi qiymatini yaratish va uni boshqa ustunga qo'yish mumkinmi?

Agar bu imkon bo'lsa, xash qiymatining keyingi sonidan 1,2,3,4,5,6,7,8,9,0 sonini tanlashni xohlayman deb umid qilaman. Shunday qilib men osonlik bilan guruhni tanlashim mumkin edi ustunlarning 10% ni tashkil etadi.

Jadvalda bo'lgan DDL:

CREATE TABLE [dbo].[Phrase] 
(
    [PhraseId] UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
    [English] NVARCHAR(250) NOT NULL,
    [EnglishAscii] AS (ASCII(UPPER([English]))) PERSISTED,
    [Kanji] NVARCHAR(MAX) NULL,

    PRIMARY KEY CLUSTERED ([PhraseId] ASC),
    CONSTRAINT [FK_PhrasePhraseChapter] 
        FOREIGN KEY ([ChapterId]) REFERENCES [dbo].[PhraseChapter] ([PhraseChapterShortId])
);

Kanji ustuni uchun ASCII funktsiyasidan foydalanganligini eslayman va u har bir satr uchun faqat 63 marta qaytadi.

0
Kuting, nima uchun ma'lumotlarga aralashmoqchisiz? Tasodifiy qatorlarni tanlashga harakat qilyapsizmi?
qo'shib qo'ydi muallif Panagiotis Kanavos, manba
ASCII() hech qanday ma'lumotni qabul qilmaydi. bitta </​​i> belgining ASCII qiymatini qaytaradi. Agar mag'lubiyatga qo'llanilsa, birinchi belgilarining ASCII qiymatini qaytaradi. Unicode ma'lumotlari uchun munosib vazifa UNICODE deb ataladi.
qo'shib qo'ydi muallif Panagiotis Kanavos, manba

6 javoblar

SQL server tomonidan taqdim etilgan yagona aralashgan algoritmlar quyidagilardan iborat. Xitoy belgilar bilan aralashmalarni yaratish mumkin deb o'ylamayman.

SQL Server 2005 va undan yuqori

MD 2 (MD2)
MD 4 (MD4)
MD 5 (MD5)
SHA-0 (SHA)
SHA-1 (SHA1)

SQL Server 2012 ga yangi kiritilgan

SHA-2 256 bits AKA SHA-256 (SHA2_256)
SHA-2 512 bits AKA SHA-512 (SHA2_512)

Note: Hashing is usually achieved in sql server using HASHBYTES function. MD5 and SHA1 are most commonly used to avoid duplicates/collisions in hash values

1
qo'shib qo'ydi

SQL server tomonidan taqdim etilgan yagona aralashgan algoritmlar quyidagilardan iborat. Xitoy belgilar bilan aralashmalarni yaratish mumkin deb o'ylamayman.

SQL Server 2005 va undan yuqori

MD 2 (MD2)
MD 4 (MD4)
MD 5 (MD5)
SHA-0 (SHA)
SHA-1 (SHA1)

SQL Server 2012 ga yangi kiritilgan

SHA-2 256 bits AKA SHA-256 (SHA2_256)
SHA-2 512 bits AKA SHA-512 (SHA2_512)

Note: Hashing is usually achieved in sql server using HASHBYTES function. MD5 and SHA1 are most commonly used to avoid duplicates/collisions in hash values

1
qo'shib qo'ydi

ASCII doesn't hash anything. It returns the ASCII value of a single ASCII character. When applied to a string, it returns the ASCII value of the first character.

ASCII() dasturini NVARCHAR ustuniga qo'llash bug hisoblanadi, chunki har qanday noyob inglizcha belgilar serverning harmanlama bilan mos keladigan kod sahifasi bilan kodlangan kabi muomala qilinadi. Xuddi shu so'rov turli xil serverlarda ishlaydi, boshqa qiymat qaytaradi.

Hatto bundan ham yomoni, agar birinchi belgining serverning har xilligi bilan ifodalanmasa, ? - ASCII 63 ga teng keladigan qiymatni olasiz. Bu bitta kod sahifada boshqa kod sahifasiga bog'langan bo'lishi kerak.

Unicode ma'lumotlari uchun munosib funktsiya UNICODE deb ataladi.

Agar belgilar guruhiga asoslanib qatorlarni qaytarishni xohlasangiz, masofa tezroq tanlovi " Like " operatori, masalan:

select * from Phrase
where 
    English like N'[A表]%' OR 
    Kanji like N'[A表]%'

LIKE can take advantage of any indexes that cover the fields and perform a range search instead of scanning the entire table.

0
qo'shib qo'ydi

ASCII doesn't hash anything. It returns the ASCII value of a single ASCII character. When applied to a string, it returns the ASCII value of the first character.

ASCII() dasturini NVARCHAR ustuniga qo'llash bug hisoblanadi, chunki har qanday noyob inglizcha belgilar serverning harmanlama bilan mos keladigan kod sahifasi bilan kodlangan kabi muomala qilinadi. Xuddi shu so'rov turli xil serverlarda ishlaydi, boshqa qiymat qaytaradi.

Hatto bundan ham yomoni, agar birinchi belgining serverning har xilligi bilan ifodalanmasa, ? - ASCII 63 ga teng keladigan qiymatni olasiz. Bu bitta kod sahifada boshqa kod sahifasiga bog'langan bo'lishi kerak.

Unicode ma'lumotlari uchun munosib funktsiya UNICODE deb ataladi.

Agar belgilar guruhiga asoslanib qatorlarni qaytarishni xohlasangiz, masofa tezroq tanlovi " Like " operatori, masalan:

select * from Phrase
where 
    English like N'[A表]%' OR 
    Kanji like N'[A表]%'

LIKE can take advantage of any indexes that cover the fields and perform a range search instead of scanning the entire table.

0
qo'shib qo'ydi

CHECKSUM kakellangan ustunni yaratishga urinib ko'rdingizmi:

CREATE TABLE [dbo].[Phrase] (
    [PhraseId]     UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
    [English]      NVARCHAR (250)   NOT NULL,
    [EnglishAscii] AS               (ascii(upper([English]))) PERSISTED,
    [Kanji]        NVARCHAR (MAX)   NULL,
    [KanjiCS]      CHECKSUM([Kanjii],
    PRIMARY KEY CLUSTERED ([PhraseId] ASC),
    CONSTRAINT [FK_PhrasePhraseChapter] FOREIGN KEY ([ChapterId]) REFERENCES [dbo].[PhraseChapter] ([PhraseChapterShortId])
);

Bunga ko'ra MSDN bilan bog'lanish CHECKSUM Jadvalning bir satri bo'yicha hisoblangan chexlar qiymatini yoki so'zlar ro'yxati orqali qaytaradi. CHECKSUM hash indekslarini o'rnatish uchun mo'ljallangan. '

0
qo'shib qo'ydi
Bu checksum , xash emas. To'qnashuvlarni boshdan kechirish juda oson
qo'shib qo'ydi muallif Panagiotis Kanavos, manba

CHECKSUM kakellangan ustunni yaratishga urinib ko'rdingizmi:

CREATE TABLE [dbo].[Phrase] (
    [PhraseId]     UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
    [English]      NVARCHAR (250)   NOT NULL,
    [EnglishAscii] AS               (ascii(upper([English]))) PERSISTED,
    [Kanji]        NVARCHAR (MAX)   NULL,
    [KanjiCS]      CHECKSUM([Kanjii],
    PRIMARY KEY CLUSTERED ([PhraseId] ASC),
    CONSTRAINT [FK_PhrasePhraseChapter] FOREIGN KEY ([ChapterId]) REFERENCES [dbo].[PhraseChapter] ([PhraseChapterShortId])
);

Bunga ko'ra MSDN bilan bog'lanish CHECKSUM Jadvalning bir satri bo'yicha hisoblangan chexlar qiymatini yoki so'zlar ro'yxati orqali qaytaradi. CHECKSUM hash indekslarini o'rnatish uchun mo'ljallangan. '

0
qo'shib qo'ydi
Bu checksum , xash emas. To'qnashuvlarni boshdan kechirish juda oson
qo'shib qo'ydi muallif Panagiotis Kanavos, manba