我發現我們可以對錶中的列進行排序,即使它是字母數字。SQL Alpha數字排序問題
我這裏唯一的問題是如果列數據只是字符,它會引發錯誤。
BEGIN TRAN
USE SomeDatabase
CREATE TABLE dbo.Section
(
Section varchar(50) NULL
)
INSERT INTO dbo.Section (Section.Section) VALUES ('BB')
INSERT INTO dbo.Section (Section.Section) VALUES ('1 ')
INSERT INTO dbo.Section (Section.Section) VALUES ('AB 1')
INSERT INTO dbo.Section (Section.Section) VALUES ('A21')
INSERT INTO dbo.Section (Section.Section) VALUES ('B2')
INSERT INTO dbo.Section (Section.Section) VALUES ('A11')
INSERT INTO dbo.Section (Section.Section) VALUES ('B20')
INSERT INTO dbo.Section (Section.Section) VALUES ('B21')
INSERT INTO dbo.Section (Section.Section) VALUES ('AB10')
INSERT INTO dbo.Section (Section.Section) VALUES ('A10')
SELECT Section
FROM dbo.Section
SELECT Section
FROM dbo.Section
ORDER BY LEFT(Section,PATINDEX('%[0-9]%',Section)-1), -- alphabetical sort
CONVERT(INT,SUBSTRING(Section,PATINDEX('%[0-9]%',Section),LEN(Section))) -- numerical sort
DROP Table dbo.Section
ROLLBACK
因此,排序'BB'是問題所在。如果你刪除BB,那麼它一切正常。
最初沒有工作,但我看到它現在工作。 – Doctor
嘗試最新的編輯,我看到第二個錯誤,你沒有從SUBSTRING函數的長度中減去PATINDEX()值;-) – Oreo