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

这样的查询有什么好方法吗?

zsy_good 2003-01-19 03:56:25
游戏字典表
10000000 暴力游戏
00100000 色情游戏

一个游戏的类型为
10100000

我查询的信息出来要为 "暴力游戏,色情游戏"
我该如何做
...全文
9 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
nielisheng 2003-01-20
j老师的很好的,绝
回复
LightPoint 2003-01-20
假设“游戏字典表”均为字符型,不是字符型的话转换为字符。不足位的话前面用“0”填充,8位字长的字符。先定义一为空的字符串,由于每位对应一种类型,只需遍历整个字符串,逐个字符进行判断为1取相关的名字加入到输入串中就行。

现在我没办法调试,故不写代码给你,我将算法的思路给你,你自己去调试。有什么问题,请与我联系!!

回复
monkeythin 2003-01-20
create procedure test
@pi_id char(8),
@po_type varchar(200) output
begin
declare @pm_length int,
@pm_bit char(1),
@pm_tmp_id char(8)
set @po_type = ''
set @pm_length = datalength(@pi_id char)
while (@pm_length >= 0)
begin
set @pm_bit = substring(@pi_id char, @pm_length, 1)
if @pm_bit = '1'
begin
set @pm_tmp_id = replicate('0',8 - @pm_length) + '1' + replicate('0', 8 - @pm_length - 1)
select @po_type = ',' + column_gamename from table_games
where column_gameid = @pm_tmp_id
end
set @pm_length = @pm_length - 1
end
set @pm_length = datalength(@po_type)
if @pm_length > 0
begin
set @po_type = substring(@po_type, @pm_length - 1, @pm_length -1)
end
end
回复
zsy_good 2003-01-20
我看我只能写死的程序了。
回复
zsy_good 2003-01-20
大家怎么做死了,那是可以修改的字典表,那我的程序不完蛋了
回复
pengdali 2003-01-19
你的问题完善一下!
回复
个人以为如果是SQL SERVER 2000,支持用户定义的函数。假设该函数是定义为
FUNCTION CompareStr(src:string;dst:string):boolean
begin
//判断DST是否被包含在SRC,如果是则返回TRUE,否则返回false
//抱歉,我只是比较熟悉DELPHI的写法.
end;
然后可以如此处理:(意思和大力的差不多)
FUNCTION GetGameType(Gameid:string):string;
begin
//本写法是DELPHI和MS SQL的混合体,具体请自行解释
//定义光标,假定表格名称是GameType
//然后遍历光标,发现匹配的则result:=result+[中文类型名称]
//declare @@result string
declare @@Same boolean
declare @@gameid string
declare @@ganmename string
select @@result=''
while ......
begin
fetch next gametype.gameid,gametypename into @@nowid,@@gamename
select @@same=compare(gameid,gametype.gameid);

if @@same=true @@result=@@result+@@gamename

//next record
end;
end;

回复
zsy_good 2003-01-19
小于等于好像有问题,如果一个游戏是
1000000那小于等于就是全部的游戏了,不是一个
回复
pengdali 2003-01-19
create function getstr(@content char(20))
returns varchar(2000)
as
begin
declare @str varchar(2000)
set @str=''
select @str=@str+','+rtrim(文子列) from 游戏字典表
where content<=@content
set @str=right(@str,len(@str)-1)
return @str
end
go

语句:
select 列1,getstr(列1) from 游戏字典表
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

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