无法以整数方式对varchar类型数据进行排序?

时间:2014-06-01 18:24:10

标签: sql-server ado.net

我的表格purchase的{​​{1}}数据类型为po_no

在列中,数据以varchar1/14-1598/14-1599/14-15的格式保存。

我需要将数据排序为100/14-1598/14-1599/14-15等序列。

请帮我解决一下这个问题。

提前致谢。

2 个答案:

答案 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)

  1. 剪切你的字符串直到第一个
  2. 将字符串转换为整数
  3. 按该整数排序