怎样实现Bom清单中品号字段的英文转换功能?

daihua_1113 2011-09-26 03:57:35
一共有四张表:
QCBOM单头表 ZZZCA
CA001 char(20) 品号
CA002 varchar(60) 品名
CA003 datetime 日期
CA004 char(4) 版本

QCBOM单身表 ZZZCB
CB001 char(20) 品号
CB002 char(20) 子品号
CB003 char(1) 类别 A/B/C...
CB004 varchar(80) 子品号品名
CB005 varchar(80) 子品号规格
CB006 real 用量
CB007 real 底数
CB008 varchar(60) 材质描述
CB009 varchar(20) 颜色
CB010 varchar(20) 颜色色号
CB011 real 单重
CB012 real 单个总量合计

QCBOM字头英文表 ZZZCC
CC001 CHAR(4) 品号的字头
CC002 carchar(40) 品号的英文名

QCBOM 非字头品号的中英文表 ZZZCD
CD001 CHAR(20) 品号
CD002 carchar(40) 品号的英文名
CD003 carchar(40) 品号的中文名

根据(单头表)ZZZCA中选取一项,从(单身表)ZZZCB中过滤出这一项的物料BOM清单。
然后怎样实现先从(字头英文表)ZZZCC中过滤一遍,再经(非字头品号的中英文表)ZZZCD
中过滤一遍。过滤后有英文的显示英文,没英文的依旧显示中文。
跪求各位大虾,怎样用sql实现这一功能?(函数和存储过程都行)
...全文
120 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
daihua_1113 2011-09-26
  • 打赏
  • 举报
回复
我说错了啦,我说的过滤不是过滤掉英文。而是根据后面后面的两个表实现品名这个字段的翻译功能。后面的两个表是存品号,品名(英文名)相当个英文库一样,根据这个库实现局部翻译某一字段这一功能。
dawugui 2011-09-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 daihua_1113 的回复:]
过滤英文,没有英文的才让显示中文。
[/Quote]参考如下:
create table tb(area varchar(20))
insert into tb values('100平方米')
insert into tb values('120平方米')
insert into tb values('70-80平方米')
go

--方法一
[吖-咗]
select left(area,PATINDEX('%[吖-做]%',area)-1) area from tb
/*
area
--------------------
100
120
70-80

(所影响的行数为 3 行)
*/

--方法二
--建立如下函数(非a-z A-Z 0-9 - , 以及中文字符之外的字符删除)
go
create function getnewstr(@oldstr varchar(100)) returns varchar(100)
as
begin
declare @i int
set @i = 1
while @i <= len(@oldstr)
if substring(@oldstr, @i, 1) like('[^a-z,A-Z,0-9,-]')
set @oldstr = replace(@oldstr, substring(@oldstr, @i, 1), '')
else
set @i = @i +1
return @oldstr
end
go

select area = dbo.getnewstr(area) from tb where area like('%[^a-z,A-Z,0-9,-]%')
/*
area
--------------------
100
120
70-80

(所影响的行数为 3 行)
*/

drop table tb
drop function dbo.getnewstr


如果只是过滤英文,则为a-z即可.
唐诗三百首 2011-09-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 daihua_1113 的回复:]
楼上的兄台,能给出点具体语句吗?
[/Quote]

-- 举个例子.
DECLARE @i int=1,@len int,@num int
DECLARE @address varchar(500),@c char(1)

set @len=len(@address)

while (@i<= @len)
begin
set @c=substring(@Address, @i, 1)
set @num = ascii(@c)
if ((@num > 47 and @num < 58) or (@num> 64 and @num<123))
begin
相应的处理语句
end
else
begin
相应的处理语句
end
set @i=@i+1
end
--小F-- 2011-09-26
  • 打赏
  • 举报
回复
给点数据吧 这样看着好吃力
daihua_1113 2011-09-26
  • 打赏
  • 举报
回复
楼上的兄台,能给出点具体语句吗?
唐诗三百首 2011-09-26
  • 打赏
  • 举报
回复
用游标逐位取出过滤处理..
daihua_1113 2011-09-26
  • 打赏
  • 举报
回复
过滤英文,没有英文的才让显示中文。
--小F-- 2011-09-26
  • 打赏
  • 举报
回复
到底是要过滤英文还是中文?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧