gpt4 book ai didi

sql-server - 如何有效地对包含数字和字母的 nvarchar 进行排序?

转载 作者:行者123 更新时间:2023-12-03 23:45:22 29 4
gpt4 key购买 nike

我在对表格进行有效排序时遇到了一些麻烦(表格包含大量行,因此任何优化都会产生很大的不同)。

我目前拥有的给出正确结果 (11) 的是下面的代码。

BEGIN TRANSACTION

CREATE TABLE #tPallets
(
PalletNumber bigint,
Placement nvarchar(4)
)

INSERT INTO #tPallets VALUES(100000, 'B')
INSERT INTO #tPallets VALUES(100001, 'M1')
INSERT INTO #tPallets VALUES(100002, 'M2')
INSERT INTO #tPallets VALUES(100003, 'M3')
INSERT INTO #tPallets VALUES(100004, 'M4')
INSERT INTO #tPallets VALUES(100005, 'M5')
INSERT INTO #tPallets VALUES(100006, 'M6')
INSERT INTO #tPallets VALUES(100007, 'M7')
INSERT INTO #tPallets VALUES(100008, 'M8')
INSERT INTO #tPallets VALUES(100009, 'M9')
INSERT INTO #tPallets VALUES(100010, 'M10')
INSERT INTO #tPallets VALUES(100011, 'M11')

SELECT
TOP 1 CASE
WHEN Placement LIKE 'M%' THEN CONVERT(int, SUBSTRING(Placement,2, len(Placement)-1))
ELSE 0
END AS PALLET_PLACEMENT
FROM
#tPallets
ORDER BY
1 DESC

ROLLBACK TRANSACTION

因此,如果在这种特定情况下可能的话,我正在寻找一种方法来加快选择速度。


我不会认为这是重复的答案。因为如果不在 C# 中进行排序(与在 TSql 中进行排序相反),线程中没有答案会使执行时间更快。我很难相信在 TSql 本身中没有更快的方法来做到这一点。

最佳答案

计算列上的索引 https://learn.microsoft.com/en-us/sql/relational-databases/indexes/indexes-on-computed-columns

或者,在您的情况下,结合过滤索引可能更好

https://learn.microsoft.com/en-us/sql/relational-databases/indexes/create-filtered-indexes

摆脱那些讨厌的 0。 (顺便说一下,当您的placement 不是like %M 时,您对订单的期望是什么?)

关于sql-server - 如何有效地对包含数字和字母的 nvarchar 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43606827/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com