日期:2014-05-19  浏览次数:20522 次

字符串类型的数据取里面的整数值部分的问题
用户的一个数据的编号形式如下

(2006)121       2006年第121号文档
(2006)1121     2006年第1121好文档

需求如下。假设用户需要取   编号从   (2006)121   到   (2006)1121   文档清单【121   和1121   可变,后者肯定大于前者】,这个语句如何写法。
---------------------
我有以下这个思路,就是不知道   SQL   语句如何写。
因为不允许跨年度。所以,把前面六位去掉。后面的转换成整数,然后将传入的参数进行   大于、小于   的比较即可。

------解决方案--------------------
select * from tablename
order by cast(substring(FieldName,charindex( ') ',FieldName)+1,20) as int)
------解决方案--------------------
declare @t table(name varchar(10))
insert @t
select '(2006)121 ' union all
select '(2006)1121 '

----查询
select * from @t
where convert(int,stuff(name,1,charindex( ') ',name), ' ')) between 121 and 1121
order by convert(int,stuff(name,1,charindex( ') ',name), ' '))

/*结果
name
-----------------
(2006)121
(2006)1121
*/
------解决方案--------------------
declare @v1 varchar(30)
declare @v2 varchar(30)
set @v1= '(2006)121 '
set @v2= '(2006)1121 '

if left(@v1,6)=left(@v2,6)
begin
if cast(right(@v1,len(@v1)-6) as int) > cast(right(@v2,len(@v2)-6) as int)
print @v1+ '> '+@v2
else
print @v1+ ' < '+@v2
end

------解决方案--------------------
where stuff(name,1,6, ' ')> =121