SQL从十六进制列中获取顶部记录



使用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,然后返回顶部十六进制,dec值。但我只需要EPC。

我不确定这是否是正确的方式。这就是我寻求建议的原因。

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

谢谢你抽出时间。

这就是您想要的吗?

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

您可以将表达式放入order by中。

您可以使用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

试试这个:

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 

最新更新