0

次の例では、CustomerNo を (1,2,3,10,20,400) の順序で並べ替えます。これは意図したとおりです。しかし、1a などの数値以外の CustomerNo を挿入するとエラーが発生します。問題は、CustomerNo > 1 の WHERE 句です。

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
4

1 に答える 1

1

これが私がやった方法です(列の長さに合わせて調整してください):

CASE IsNumeric(site_id) WHEN 1 THEN REPLACE(STR(site_id, 8, 0), ' ', '0') ELSE site_id END
于 2013-09-16T07:19:18.983 に答える