我在SQL Server 2000数据库中有一个VARCHAR列,可以包含字母或数字.这取决于客户在前端如何配置应用程序.

当它确实包含数字时,我希望它按数字排序,例如"1"、"2"、"10"而不是"1"、"10"、"2".只包含字母或字母和数字(如"A1")的字段可以按正常字母顺序排序.例如,这将是一个可接受的排序顺序.

1
2
10
A
B
B1

实现这一目标的最佳方式是什么?

推荐答案

一种可能的解决方案是在数字值的前面加一个字符,这样所有的字符串长度都相同.

下面是一个使用这种方法的示例:

select MyColumn
from MyTable
order by 
    case IsNumeric(MyColumn) 
        when 1 then Replicate('0', 100 - Len(MyColumn)) + MyColumn
        else MyColumn
    end

100应该替换为该列的实际长度.

Sql相关问答推荐

如何根据SQL中的列条件获取下一个时间戳?

在SQL:2003(PGQ)中,Cypher查询语言、GQL、PGQL和属性图查询的常见子集是什么?'

如何退回当年的所有参赛作品?""

用于动态查询情况的存储过程常识模式

SQL将 Select 查询作为新列添加到另一个 Select 查询

从自定义日期和时间开始,每月具有给定状态的公司数量

如何在SQL中更新Json字符串

用于过滤嵌套对象或数组中的JSON数据的WHERE条件

从列中提取子字符串的ORDER BY CASE语句

对于多字节字符,SQL Server中的DATALENGTH返回1字节

按属性值 Select 数组元素Postgres Jsonb

使用多个WITH子查询的替代方法

如何使用Clickhouse的COUNT聚合返回所有列,但GROUP BY是这些列的子集

按所选的值将记录分组到不同的列中

如何根据共同列值从两个表中包含列,但只包含左表中的行

如何根据某个值在where子句中添加某个条件

如何在 SQL Server 中将 -13422.8450 舍入到 -13422.84

在 PostgreSQL 中使用重音敏感排序进行重音不敏感搜索

查找具有相同连接列数据的所有记录

如何使用子查询锁定此查询中的选定行?