SQL从十六进制列获取最高记录

时间:2015-02-24 02:38:17

标签: sql-server

使用SQL Server 2008,通过十六进制列的下降顺序获取最高记录的最佳方法是什么?

我们假设我有这些记录:

epc                     ,UPC
-------------------------------
30342C30D01DADC00000031A,123456
30342C30D01DADC00000031B,123456
30342C30D01DADC00000031C,123456
30342C30D01DADC00000031D,123456

我已经完成了对这项任务的搜索。这是我提出的问题:

SELECT TOP 1 
   EPC,
   CONVERT(INT, CONVERT(VARBINARY(MAX), '0x' + epc, 1)) AS 'SERIAL' 
FROM 
   myTable
WHERE 
   upc = @upc 
ORDER BY 
   SERIAL DESC

这个工作,它返回EPC然后返回顶部十六进制,以十进制值。但我只需要EPC。

我不确定这是不是正确的方法。这就是我要求建议的原因。

注意:此查询是从C#应用程序执行的。我们不允许创建存储过程。

感谢您的时间。

3 个答案:

答案 0 :(得分:4)

这是你想要的吗?

SELECT TOP 1 EPC
WHERE upc=@upc
ORDER BY CONVERT(INT,CONVERT(VARBINARY(MAX), '0x' + epc,1)) DESC;

您可以在order by中添加表达式。

答案 1 :(得分:0)

您可以使用CTE

;WITH C AS(
    SELECT TOP 1 EPC,CONVERT(INT,CONVERT(VARBINARY(MAX),'0x' + epc,1)) AS 'SERIAL'
    FROM myTable
    WHERE upc=@upc
    ORDER BY SERIAL DESC
)
SELECT EPC FROM C

答案 2 :(得分:-1)

试试这个:

SELECT TOP 1 EPC 
FROM(
    SELECT TOP 100 PERCENT 
        EPC,
        CONVERT(INT,CONVERT(VARBINARY(MAX),'0x' + epc,1)) AS 'SERIAL' 
    FROM myTable
    WHERE upc = @upc 
    ORDER BY 2 DESC
)A