首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在T-SQL中转换varchar(8)值并使用ASC

在T-SQL中转换varchar(8)值并使用ASC
EN

Stack Overflow用户
提问于 2011-08-29 14:29:05
回答 5查看 622关注 0票数 1

我在下面的表格中有一个数据,它是varchar(8)数据类型

合计

代码语言:javascript
运行
复制
100
101
104.5
88
1038
64
108.3
10872
900

我喜欢在T-sql中使用ASC,这样我就可以按升序显示它,但是我不能这样做,因为它是以varchar(8)形式显示的

例如

代码语言:javascript
运行
复制
select Total from
Table A
Order by Total ASC

如何先将这些值添加到临时临时表中?如何将这个varchar(8)值转换成什么?以便您可以使用T-SQL query以ASC或升序显示它们?有没有人?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-29 14:33:24

你可以像这样转换这个值。

代码语言:javascript
运行
复制
SELECT 
    Total 
FROM Table A
ORDER BY CAST(Total AS FLOAT) ASC
票数 1
EN

Stack Overflow用户

发布于 2011-08-29 14:35:17

示例中的值看起来像是浮点数。所以

1)由于它们都不超过8位,所以可以将其转换为float(53) (大约有15位小数精度),而不会丢失数据。或者转换为decimal(15,7)以完全确定。

2)通常将浮点值作为字符串存储在数据库中是很奇怪的。

票数 1
EN

Stack Overflow用户

发布于 2011-08-29 14:58:23

您可能会丢失转换回浮点型的数据。

所以这里是一个基于varchar的排序。

代码语言:javascript
运行
复制
DECLARE @badDesign TABLE (floatcol varchar(8) NOT NULL);
INSERT @badDesign VALUES ('100'),('101'),('104.5'),('88'),('1038'),('64'),('108.3'),('10872'),('900'),('108'), ('108.32'), ('108.4')

SELECT *
FROM @badDesign
ORDER BY
   RIGHT('00000000' +
       CASE
           WHEN CHARINDEX('.', floatcol) = 0 THEN floatcol
           ELSE LEFT(floatcol, CHARINDEX('.', floatcol)-1)
       END
       , 8),
   CASE
       WHEN CHARINDEX('.', floatcol) = 0 THEN '.0'
       ELSE SUBSTRING(floatcol, CHARINDEX('.', floatcol)+1, 8)
   END
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7226844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档