使用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