导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

急!急!求varchar类型的字段的最大值

huangsizen 2003-12-25 10:59:58
字段名为no,类型为varchar.
如有数据如下: 100
1001
888
10020
现在我的问题是:求出该字段的最大值,如用“select max(no) from 表名”进行查询,则得到结果为888,但我想得到的结果是10020.

有结果马上结帖。
...全文
139 点赞 收藏 13
写回复
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangsizen 2003-12-25
好,马上结帖
回复
qiaolin53 2003-12-25
varchar是字符型的,你对它max,得到的结果是按照字符的ANSI码进行比较的
例如
888和A比较,肯定是A>888
必须转换成数字型的再比较或求max
回复
huangsizen 2003-12-25
victorycyz():你写的第一个可以,但第二个不可以,可不可以再写一个过来?
回复
qiaolin53 2003-12-25
select max(convert(integer,字段)) from 表
回复
jingxijun 2003-12-25
中海的方法好
改进一下 中海的:
select ltrim(rtrim(max(right(replicate(' ',1000)+ltrim(rtrim([no])),1000)))) from tablename
回复
wuqiuzhi 2003-12-25
真是衰,没有看明白题意,呵呵!
我想是不是可以先选出里面长度最大的,保证是数字同时第一个是非0,然后再比较首字符最大的。
回复
wuqiuzhi 2003-12-25
首先varchar的最大长度是8000,
另外:select max(datalen(no)) from yourtable
回复
victorycyz 2003-12-25
避免溢出:
select max(right(replicate(' ',1000)+[no],1000)) from tablename
回复
jingxijun 2003-12-25
select max(cast(no as DECIMAL)) 行不?
select max(cast(no as MONEY))
--MONEY介于 – 922,337,203,685,477.5808 到 922,337,203,685,477.5807 之间的符号整数。
回复
select max(cast(no) as decimal(38,0))) from 表
回复
victorycyz 2003-12-25
select max(cast([no] as bigint)) from tablename
回复
huangsizen 2003-12-25
不行,如有数据200312250001时,转换时发生错误,"varchar值'200312250001'的转换溢出了int列
回复
jingxijun 2003-12-25
select max(cast(no as int)) from 表名
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告