![]() |
1
9
最简单的解决方案是预先挂起零
但是,这不会考虑字母字符。为了处理alpha字符,你需要知道你可能有多少潜在的alpha字符。如果有,你可以这样做:
加法 试运行:
关于我的解决方案的说明。如果字母字符有特殊的含义,那么正如Erick Robertson所建议的那样,您应该将数据分解为单独的列。上面的解决方案只处理两种非常特殊的情况:一种是全数字值,另一种是带有单个尾随字母字符的值。如果数据可能有多个字母字符,或者字母字符有时不在值的末尾,那么我的解决方案将不起作用。此外,应该注意的是,我的解决方案将导致表扫描来计算每个值上的可排序字符串。 如果你所寻求的是一次性的快速解决方案,那么我的方法就会奏效。如果您正在寻找一个长期的解决方案,那么要么将数据分解为单独的列,接受愚蠢的排序顺序,要么添加一个列来指定每个值的相对排序顺序。 |
![]() |
2
2
如果您熟悉C#或VB.net,可能值得考虑编写一个CLR函数来为您执行排序,因为这种排序顺序不够标准,很难在TSQL中全面、正确地描述。 |
![]() |
3
1
最好的解决方案是有一个单独的字段来存储令牌的int值。在维护token列时,应该维护此列。然后在排序时,先按int value列排序,然后按token列排序。这将允许您为这些列编制索引,以便使用大型数据集快速检索数据。 从alpha到int的转换函数很慢,不能利用索引来加速查询。随着数据集的增长,这种类型的解决方案只会变得更慢,使数据库陷入困境。 |
![]() |
Jack Skeletron · T-SQL三表求和 7 年前 |
![]() |
CSK · 列出sql server中存储过程中的存储过程 7 年前 |
![]() |
DRT · 从文本字段中提取多个日期 7 年前 |
![]() |
ihatemash · 确定可以合并哪些行的SQL查询 7 年前 |
![]() |
Shawn · 使用WinZip命令行的SQL Server作业 7 年前 |