将varchar排序为数字,它也可以是数字和字母的混合

时间:2013-09-16 07:10:42

标签: sql varchar

以下按以下顺序对CustomerNo进行排序:(1,2,3,10,20,400),这是预期的。但是在插入非数字CustomerNo时遇到错误,例如1a。问题是WHERE子句,其中CustomerNo> 1。

Conversion failed when converting the varchar value '1a' to data type int.

我并不特别关注非数字CustomerNo在订单中的位置。我只是不希望它失败。如果我删除了WHERE子句,我总是得到订单(1,2,3,10,20,400,1a),但随后使用SELECT TOP 1 *,我总是得到CustomerNo = 1的行。我想得到下一个。

SELECT TOP 1 *
FROM [Database].[Company].[Table]
WHERE CompanyNo = 804
  AND CustomerNo > 1
ORDER BY 
  CASE IsNumeric(CustomerNo) 
    WHEN 1 THEN Replicate('0', 100 - Len(CustomerNo)) + CustomerNo 
    ELSE CustomerNo
  END

1 个答案:

答案 0 :(得分:1)

这就是我的做法(根据你的列长度调整):

CASE IsNumeric(site_id) WHEN 1 THEN REPLACE(STR(site_id, 8, 0), ' ', '0') ELSE site_id END