日期:2014-05-17  浏览次数:20508 次

sqlserver, 比较字符串, 区分长度
例如 varchar 类型的字段 存放的值是:57,127 在比较的时候127要比57大,我用max函数查询出来的是57,请问有什么改进的办法吗?
sqlserver 比较

------解决方案--------------------
存储数字就该用 int,用 varchar 只好 convert(int, field)了,自讨苦吃了
------解决方案--------------------
引用:
嗯 ,之前没有考虑到这个问题,但是现在数据库设计改动的代价比较大,所以只能通过复杂的方法查询出这种效果了。

Quote: 引用:

存储数字就该用 int,用 varchar 只好 convert(int, field)了,自讨苦吃了


是这样吗:
declare @t table(id int,v varchar(30))


insert into @t
select 1,  '57,127' union all
select 2,  '125,98'  


select id,
       v,
       max(cast(SUBSTRING(t.v, number ,CHARINDEX(',',t.v+',',number)-number) as int)) max_value
from @t t,master..spt_values s
where s.number >=1
and s.type = 'P'
and SUBSTRING(','+t.v,s.number,1) = ','
group by id,v
/*
id v     max_value
2 125,98 125
1 57,127 127
*/

------解决方案--------------------
需要先拆分,然后转化为数字类型,然后求max值
------解决方案--------------------
把值拆成列来对比