首页 > 解决方案 > 在 sql 中使用 nvarchar 列时如何接受订单

问题描述

我有一个这样的查询:

SELECT [Drug_id]
FROM tbl_Receiving
ORDER BY CAST(SUBSTRING([Drug_id], 3, LEN([Drug_ID])) as int)

但结果越来越

A-1
A-10A
A-11
A-2
A-20A
A-21
A-22
A-3
A-30
A-31

但我需要按正确的升序排列。

   A-1
   A-2
   A-3
   A-10
   A-11

我的 [Drug_id] 列是 nvarchar(50)

标签: sqlsql-serverstringsql-order-by

解决方案


试试这个:运行这个查询

    select substring(drug_id,1,CHARINDEX('-',drug_id)) + convert(varchar,cast(substring(drug_id,CHARINDEX('-',drug_id)+1,len(drug_id)) as int)) id from tbl_Receiving
order by  cast(substring(drug_id,CHARINDEX('-',drug_id)+1,len(drug_id)) as int)

推荐阅读