ในขณะที่คำถามนี้เฉพาะกับ SQL Server และคำตอบนี้ไม่ได้ฉันรู้สึกว่าฉันควรโพสต์ข้อมูลนี้เพียงเพื่อสร้างความตระหนักรู้และไม่ขัดต่อคำตอบอื่น ๆ
ดังที่กล่าวไว้ภายนอก SQL Server ในบางสภาพแวดล้อมคุณสามารถทำการเรียงลำดับได้ เป็นสิ่งที่ระบุไว้อย่างน้อยในเอกสาร Unicode ในUNICODE LOCALE DATA MARKUP LANGUAGE (LDML) ส่วนที่ 5: การรวบรวมมาตรฐาน / รายงานมีแผนภูมิสำหรับการตั้งค่าการเรียงที่อธิบายตัวเลือกต่าง ๆ สำหรับการปรับแต่งพฤติกรรมการเรียงลำดับ หนึ่งในตัวเลือกคือ-kn-true
หรือ[numericOrdering on]
:
หากตั้งค่าเป็นเปิดลำดับเลขฐานสิบใด ๆ (General_Category = Nd ใน [ UAX44 ]) จะถูกจัดเรียงในระดับหลักพร้อมค่าตัวเลข ตัวอย่างเช่น "A-21" <"A-123" น้ำหนักหลักที่คำนวณได้ทั้งหมดอยู่ที่จุดเริ่มต้นของกลุ่มการเรียงลำดับตัวเลขใหม่ ดังนั้นด้วยตาราง UCA ที่ไม่มีการตัดทอน "a $" <"a0" <"a2" <"a12" <"a⓪" <"aa"
อย่างไรก็ตามเอกสารนี้เป็น "มาตรฐานทางเทคนิค" และไม่ใช่ส่วนหนึ่งของข้อมูลจำเพาะ Unicode หลัก หมายเหตุที่ด้านบนสุดของเอกสารระบุ:
มาตรฐานทางเทคนิค Unicode (UTS)เป็นข้อกำหนดเฉพาะ ความสอดคล้องกับมาตรฐาน Unicode ไม่ได้บ่งบอกถึงความสอดคล้องกับ UTS ใด ๆ
ดังนั้นลักษณะการทำงานนี้โดยเฉพาะจะไม่สามารถใช้ได้ใน SQL Server หรือแม้แต่ใน. NET (อย่างน้อยก็ไม่ได้โดยกำเนิด) แม้ว่าทั้งสองจะเป็นไปตามข้อกำหนดของ Unicode หลัก
ICUโครงการ (ส่วนประกอบระหว่างประเทศเพื่อการ Unicode) เป็นชุดของ C / C ++ และห้องสมุด Java ที่ดำเนินการทำงานนี้และมีแม้กระทั่งการสาธิตออนไลน์ของมัน และภายใต้ "โปรเจ็กต์ที่เกี่ยวข้อง" มีลิงก์ไปยังโปรเจ็กต์. NET ที่ดูเหมือนจะเป็นตัวห่อวัตถุ COM สำหรับไลบรารี ICU ที่จะอนุญาตให้ฟังก์ชันนี้เปิดเผยรหัสที่ได้รับการจัดการ แต่ไม่ชัดเจนว่าโครงการ. NET นั้นยังคงทำงานอยู่
แต่การที่จะเห็นพฤติกรรมนี้ในการดำเนินการไปที่ห้องไอซียู Collation สาธิต
วางสิ่งต่อไปนี้ลงในพื้นที่ป้อนข้อความทางด้านซ้าย:
1
2
10B
6
11
10A
3
10
ตั้งค่าตัวเลือกทั้งหมดเป็น "ค่าเริ่มต้น" ตรวจสอบตัวเลือก "หมายเลขบรรทัดอินพุต" ทางด้านขวาของsortปุ่มและตรวจสอบให้แน่ใจว่าไม่ได้เลือกตัวเลือก "จุดแข็งต่าง"
คลิกที่sortปุ่มและคุณควรจะได้รับสิ่งต่อไปนี้:
[1] 1
[8] 10
[6] 10A
[3] 10B
[5] 11
[2] 2
[7] 3
[4] 6
นี่คือสิ่งที่ควรคาดหวังเมื่อทำการเรียงลำดับสตริงทั่วไปและสิ่งที่คุณเห็นใน SQL Server
ตอนนี้ในชุดของปุ่มตัวเลือกที่อยู่เหนือsortปุ่มแถวที่สองจะมีป้ายกำกับว่า "ตัวเลข" เลือกปุ่มตัวเลือก "เปิด"
คลิกที่sortปุ่มอีกครั้งและคุณควรได้รับสิ่งต่อไปนี้:
[1] 1
[2] 2
[7] 3
[4] 6
[8] 10
[6] 10A
[3] 10B
[5] 11
การตั้งคำถามถ้าสิ่งนี้ใช้งานได้หรือไม่เมื่อส่วนที่เป็นตัวเลขอยู่กลางสตริง? ตกลงวางสิ่งต่อไปนี้ลงในพื้นที่ป้อนข้อความทางด้านซ้าย (แทนที่รายการก่อนหน้า):
Script - 1.sql
Script - 2.sql
Script - 10B.sql
Script - 6.sql
Script - 11.sql
Script - 10A.sql
Script - 3.sql
Script - 10.sql
ตรวจสอบให้แน่ใจว่าการตั้งค่าตัวเลขยังคงเป็น "เปิด" คลิกที่sortปุ่มอีกครั้งและคุณควรได้รับสิ่งต่อไปนี้:
[1] Script - 1.sql
[2] Script - 2.sql
[7] Script - 3.sql
[4] Script - 6.sql
[8] Script - 10.sql
[6] Script - 10A.sql
[3] Script - 10B.sql
[5] Script - 11.sql
ต้องการเห็นสิ่งนี้ในที่อื่นไหม สร้างโฟลเดอร์บนฮาร์ดไดรฟ์ของคุณเช่นC: \ temp \ sorting \และสร้างไฟล์เปล่าที่มีชื่อ "Script -... " เหมือนกัน ทำDIR
ในหน้าต่างคำสั่งและคุณจะเห็นการเรียงลำดับมาตรฐาน แต่เมื่อดูรายการไฟล์ใน Windows Explorer คุณจะเห็นรายการเรียงลำดับโดยใช้ตัวเลือก "ตัวเลข" :-)