我的表格purchase
的{{1}}数据类型为po_no
。
在列中,数据以varchar
,1/14-15
,98/14-15
,99/14-15
的格式保存。
我需要将数据排序为100/14-15
,98/14-15
,99/14-15
等序列。
请帮我解决一下这个问题。
提前致谢。
答案 0 :(得分:3)
CREATE TABLE dbo.Purchase
(
po_no VARCHAR(12) NOT NULL
)
ON [Primary];
INSERT INTO dbo.Purchase (po_no)
VALUES
('100/14-15'),
('98/14-15'),
('1/14-15'),
('99/14-15');
SELECT po_no,
CAST(SUBSTRING(po_no, 1, CHARINDEX('/', po_no) - 1) AS SMALLINT) AS 'v1',
CAST(SUBSTRING(po_no, CHARINDEX('/', po_no) + 1, CHARINDEX('-', po_no) - CHARINDEX('/', po_no) - 1) AS SMALLINT) AS 'v2',
CAST(SUBSTRING(po_no, CHARINDEX('-', po_no) + 1, 99) AS SMALLINT) AS 'v3'
FROM dbo.Purchase
ORDER BY v1, v2, v3;
结果是:
po_no v1 v2 v3
------------ ------ ------ ------
1/14-15 1 14 15
98/14-15 98 14 15
99/14-15 99 14 15
100/14-15 100 14 15
(4 row(s) affected)
或者您可以省略显示变量并按它们排序:
SELECT po_no
FROM dbo.Purchase
ORDER BY CAST(SUBSTRING(po_no, 1, CHARINDEX('/', po_no) - 1) AS SMALLINT),
CAST(SUBSTRING(po_no, CHARINDEX('/', po_no) + 1, CHARINDEX('-', po_no) - CHARINDEX('/', po_no) - 1) AS SMALLINT),
CAST(SUBSTRING(po_no, CHARINDEX('-', po_no) + 1, 99) AS SMALLINT);
结果是:
po_no
------------
1/14-15
98/14-15
99/14-15
100/14-15
(4 row(s) affected)
答案 1 :(得分:0)