sql-server - SQL Server Order By Asc 在一个主要存储数字的 varchar 列中
问题描述
我VarChar
在 SQL Server 中有一个列,其中主要存储数字,但也有一些字符串。我想用
Select column1
from table
Order by Column1 Asc
但它按此顺序对数字进行排序
1
10
11
12
19
2
3
4
5
String1
String2
...
我已经在网上搜索了一种方法,推荐的方法是转换为 INT 或执行以下操作:
Select column1
from table
Order by Column1 + 0 Asc
但是,这些解决方案对我不起作用,因为我的列中有字符串并且我收到错误:
将 varchar 值 'Damage' 转换为数据类型 int 时转换失败。
解决方案
假设你有一个这样的表:
CREATE TABLE #y(i VARCHAR(10))
并且您在其中插入了以下数据:
INSERT INTO #y VALUES('1'),('2'),('10'),('9'),('20'),('ffff'),('aaaa'),('zzzz')
您可以尝试以下查询以根据需要对数据进行正确排序:
SELECT * FROM #y
ORDER BY CASE ISNUMERIC(i) WHEN 1 THEN CAST(i AS INT) ELSE 99999999999 end ASC, i ASC
您也可以在这里找到许多其他解决此问题的方法。
推荐阅读
- ios - 在 Swift 中使用空表调用
- stack - 如何连接到 ws-Server?
- python - Postgres如何从csv文件中插入python字典?
- java - Spring Security 下载文件而不是登录
- python - 不允许迭代 `tf.Tensor`:AutoGraph 确实转换了这个函数
- wordpress - PixelMySite Elementor 冲突错误问题
- ruby - 无法更新 Bundler 版本
- calculator - TI 83 plus如何通过程序使屏幕变暗?
- html - 在现有应用程序中使用额外的 React 组件
- c# - SignalR .net 核心在 Windows 内部网中获取 401 协商请求