字符串类型的数据取里面的整数值部分的问题
用户的一个数据的编号形式如下
(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