使用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#应用程序执行的。我们不允许创建存储过程。
感谢您的时间。
答案 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