ฉันทำแบบทดสอบไม่กี่ครั้งและฉันคิดว่ามันเป็นวิธีการแก้ปัญหา แต่สามารถทำให้งานของคุณเสร็จสิ้นได้เนื่องจาก SQL เพราะตัวมันเองไม่ได้ช่วยอะไรมาก
หากคุณสังเกตเห็นว่ายูนิโค้ดของตัวละครเหล่านี้อยู่ใกล้กัน
select unicode(N'أ')
= 1571
select unicode(N'ا')
= 1575
select unicode(N'إ')
= 1573
ดังนั้นระหว่างأถึง,, มันคือตั้งแต่ 1571 ถึง 1575 หรือถ้าคุณต้องการให้แน่ใจว่าคุณได้ทุกสิ่งระหว่างนั้น
ตรวจสอบให้แน่ใจว่าคุณรวมตั้งแต่ 1569 ถึง 1575
ซึ่งก็คือ
Select NCHAR(1569) = ء
Select NCHAR(1570) = آ
Select NCHAR(1571) = أ
Select NCHAR(1572) = ؤ
Select NCHAR(1573) = إ
Select NCHAR(1574) = ئ
Select NCHAR(1575) = ا
ดังนั้นเพื่อให้แน่ใจว่าคุณรวมทุกสิ่งที่คล้ายกันในการค้นหาของคุณคุณสามารถใช้นิพจน์ทั่วไป
SELECT *
FROM TestTable
WHERE ArabicChars like '%[ء-ا]%'
ดังนั้นในกรณีนี้คุณจะได้อักขระทั้งหมดระหว่างءถึงاซึ่งรวมอักขระทั้งหมดระหว่าง 1569 ถึง 1575
ดังนั้นในกรณีนี้ถ้าตารางของคุณมี
CREATE TABLE [dbo].[TestTable] (
[ArabicChars] [nvarchar](50) COLLATE Arabic_CI_AI NOT NULL,
)
INSERT INTO TestTable values (N'احمد');
INSERT INTO TestTable values (N'أحمد');
INSERT INTO TestTable values (N'إحمد');
แบบสอบถามข้างต้นจะทำให้พวกเขาทั้งหมด
แต่คุณจะสังเกตเห็นบางสิ่งที่ตลก
หากคุณมีคอลัมน์เป็นคีย์หลัก
CREATE TABLE [dbo].[TestTable] (
[ArabicChars] [nvarchar](50) COLLATE Arabic_CI_AI NOT NULL,
CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED
(
[ArabicChars] ASC
)
) ON [PRIMARY];
คุณจะไม่สามารถแทรก 2 ระเบียนนี้
INSERT INTO TestTable values (N'أحمد');
INSERT INTO TestTable values (N'إحمد');
INSERT INTO TestTable values (N'ءحمد');
เนื่องจากء, أ, إนั้นเป็นของ SQL ทั้งหมดจึงเป็นส่วนหนึ่งของ hamza ซึ่งก็คือء
ดังนั้นหากคุณเรียกใช้แบบสอบถาม
SELECT *
FROM TestTable
WHERE ArabicChars like 'ء%'
มันจะแสดงให้คุณ
أحمد
إحمد
เพื่อให้ได้เนื้อเรื่องที่สั้น
ถึง SQL أไม่ได้ = ถึงاเพราะมันมีตัวอักษรต่างกัน 2 ตัวคือ hamza และ alefp
แต่ء = آ = أ = ؤ = إ = ئ
พวกเขาทั้งหมด Hamza ء