2013-02-08 73 views
1
J12M1 
J12M14 
J12M15 
J12M18 
J12M2 
J12M21 
J12M22 
J12M23 
J12M24 
J12M25 
J12M26 
J12M27 
J12M28 
J12M29 
J12M35 
J12M36 
J12M39 

,但我需要的是排序依据数字Colunm

J12M1 
J12M2 
J12M3 

我能在我的查询做

select productnumber from vt_fe_product order by productnumber 
+0

哪里'J12M3'在第二个列表从何而来?这不在你的第一个列表中。 –

回答

2

您可以用零前面加上:

SELECT 
    productnumber 
FROM 
    vt_fe_product 
ORDER BY 
    Right('0000000000' + productnumber, 10) 

(来源: https://stackoverflow.com/a/3326371/284240

Demo

结果:

PRODUCTNUMBER 
J12M1 
J12M2 
J12M14 
J12M15 
J12M18 
J12M21 
J12M22 
J12M23 
J12M24 
J12M25 
J12M26 
J12M27 
J12M28 
J12M29 
J12M35 
J12M36 
J12M39 
+0

+1我以前从未见过那招。 – Taryn

+0

@bluefeet:我也是!了解它[这里](http://stackoverflow.com/a/3326371/284240)。 –

0

如果productnumber格式良好定义(即它将始终是'J12M'后跟一个数字),那么您可以删除'固定'部分并为您的排序投下数字部分。沿线的东西:

ORDER BY CONVERT(int, REPLACE(productnumber, 'J12M', '')) 
1

也许你需要尝试使用额外的LEN功能?

SELECT ProductName 
FROM 
(
SELECT 
'J12M1' AS ProductName 
UNION ALL 
SELECT 
'J12M14' AS ProductName 
....................... 
UNION ALL 
SELECT 
'J12M24' AS ProductName 
UNION ALL 
SELECT 
'J12M25' AS ProductName 
UNION ALL 
SELECT 
'J12M35' AS ProductName 
UNION ALL 
SELECT 
'J12M36' AS ProductName 
UNION ALL 
SELECT 
'J12M39' AS ProductName 
) AS Products 
ORDER BY LEN(ProductName), ProductName 
0

您可以订购这种方式: -

select product_number from vtfe_product order by CONVERT(int, substring(product_number, 5, len(product_number)));

0

已经看到了其他的答案。决定采取不同的路线。有点比较冗长,但是这个解决方案的好处是你最终会对实际的数字进行排序,并且首先对'J'数字进行排序。

SELECT 
    -- Get the first numeric component 
    CAST (
     SUBSTRING(
      productnumber, 
      CHARINDEX('J', productnumber, 1) + 1, 
      CHARINDEX('M', productnumber, 1) - CHARINDEX('J',productnumber, 1) - 1) 
     AS INT 
    ) AS FirstSort, 
    -- Get the second numeric component 
    CAST (
     SUBSTRING(
      productnumber, CHARINDEX('M', productnumber, 1) + 1, LEN(productnumber)) 
     AS INT 
    ) AS SecondSort, 
    productnumber 
FROM 
    productnumbers 
ORDER BY 
    FirstSort, 
    SecondSort 

DEMO

http://sqlfiddle.com/#!6/fd371/2