只能写一个函数来转换你的(一、三、七、十三)了
或者建议你用1队、3队、7队、13队
这样的话就可以这样写语句
select * from 表 order by cast(left(队名,len(队名)-1) int)
或者建议你用1队、3队、7队、13队
这样的话就可以这样写语句
select * from 表 order by cast(left(队名,len(队名)-1) int)
解决方案 »
- 我们现在一个数据库,想在两个地方同时架设。怎么样才能使两边的数据同步????
- 中文排序的问题,求助!
- SQL语法
- 咨询myeclipse+tomcat+spring+sql server进行链接服务器出错,急需要高手指点下迷津!!!小弟穷,暂时没分送,5555
- 寻找大力解决问题,用SQL语句导入word的一个存储过程(能导出列名),急盼!!!
- sql到底有没有‘limit’关键字啊,我想实现一个简单的功能?
- 哪儿可以下载DB2 7.2企业版
- 各位帮忙看看这帖(http://www.csdn.net/expert/TopicView.asp?id=431789)
- 请教关于接受执行insert、update、delete的存储过程返回记录的问题
- 用序号排序的触发器 求代码
- 关于把字符串分成几段的问题,十万火急!!
- SQL Server中的datatime和Access中日期有什么不同?在线等待
执行以上语句时,提醒int附近有错误!
能对cast(left(队名,len(队名)-1) int)语句解释一下吗?
少写了一个as,应该是
cast(left(队名,len(队名)-1) as int)
create function getint(@Ds nvarchar(10))
returns int
as
begin
declare @i int
select @i=CASE RIGHT(RTRIM(@Ds),1)
WHEN '一' THEN 1
WHEN '二' THEN 2
WHEN '三' THEN 3
WHEN '四' THEN 4
WHEN '五' THEN 5
WHEN '六' THEN 6
WHEN '七' THEN 7
WHEN '八' THEN 8
WHEN '九' THEN 9 END
select @i=@i+(len(@Ds)-1)*10
return @i
end
--建立测试数据
create table 表 (序号 int,队名 nvarchar(10))
insert into 表 values(1,'一队')
insert into 表 values(1,'十三队')
insert into 表 values(1,'三队')
insert into 表 values(1,'七队')
select * from 表--调用得到结果
select * from 表 order by dbo.getint(left(队名,len(队名)-1))
returns int
as
begin
declare @i int
if (Len(@Ds) = 2)
begin
select @i=CASE Left(@Ds,1)
WHEN '一' THEN 1
WHEN '二' THEN 2
WHEN '三' THEN 3
WHEN '四' THEN 4
WHEN '五' THEN 5
WHEN '六' THEN 6
WHEN '七' THEN 7
WHEN '八' THEN 8
WHEN '九' THEN 9
END
end else
if (Len(@Ds) = 3) and (Left(@Ds,1) ='十')
begin
set @i=Case substring(@Ds,2,1)
WHEN '一' THEN 11
WHEN '二' THEN 12
WHEN '三' THEN 13
WHEN '四' THEN 14
WHEN '五' THEN 15
WHEN '六' THEN 16
WHEN '七' THEN 17
WHEN '八' THEN 18
WHEN '九' THEN 19
END
end else
if (Len(@Ds) = 4)
begin
set @i=(Case substring(@Ds,1,1)
WHEN '一' THEN 10
WHEN '二' THEN 20
WHEN '三' THEN 30
WHEN '四' THEN 40
WHEN '五' THEN 50
WHEN '六' THEN 60
WHEN '七' THEN 70
WHEN '八' THEN 80
WHEN '九' THEN 90
END ) +
(Case substring(@Ds,3,1)
WHEN '一' THEN 1
WHEN '二' THEN 2
WHEN '三' THEN 3
WHEN '四' THEN 4
WHEN '五' THEN 5
WHEN '六' THEN 6
WHEN '七' THEN 7
WHEN '八' THEN 8
WHEN '九' THEN 9
END )
end
return @i
end--建立测试数据
create table 表 (序号 int,队名 nvarchar(10))
insert into 表 values(1,'一队')
insert into 表 values(1,'十三队')
insert into 表 values(1,'三队')
insert into 表 values(1,'七队')
select * from 表--调用得到结果
select * from 表 order by dbo.getint(队名)--以上函数只适用于1到99队
ALTER function getint(@Ds nvarchar(10))
returns int
as
begin
declare @i int,@y int
select @i=CASE RIGHT(RTRIM(@Ds),1)
WHEN '一' THEN 1
WHEN '二' THEN 2
WHEN '三' THEN 3
WHEN '四' THEN 4
WHEN '五' THEN 5
WHEN '六' THEN 6
WHEN '七' THEN 7
WHEN '八' THEN 8
WHEN '九' THEN 9
WHEN '十' THEN 0 END
if len(@ds)=3 or len(@ds)=2
SELECT @y=CASE LEFT(RTRIM(@Ds),1)
WHEN '一' THEN 1
WHEN '二' THEN 2
WHEN '三' THEN 3
WHEN '四' THEN 4
WHEN '五' THEN 5
WHEN '六' THEN 6
WHEN '七' THEN 7
WHEN '八' THEN 8
WHEN '九' THEN 9
END
if len(@ds)=1 set @y=0
if left(@ds,1)='十' set @y=1 select @i=@i+@y*10
if @ds='十' set @i=10
return @i
end--建立测试数据
create table 表 (序号 int,队名 nvarchar(10))
insert into 表 values(1,'一队')
insert into 表 values(1,'十三队')
insert into 表 values(1,'二十队')
insert into 表 values(1,'十队')
insert into 表 values(1,'二十三队')
insert into 表 values(1,'五十三队')
insert into 表 values(1,'三队')
insert into 表 values(1,'七队')--调用得到结果
select dbo.getint(left(队名,len(队名)-1)),队名 from 表 order by dbo.getint(left(队名,len(队名)-1))--释放表
drop table 表
order by charindex(队名,'一队,三队,七队,十三队')