当前位置:主页>仓库管理软件> 列表

300分求一条SQL,都进来看看. 找免费的管家婆软件

销售管理软件版1楼: 例如 表TB1
字段 a
------------------------------------------
值 ''ccppvv68-34-78''
''ccppvv3-125-555''
''aatt44-39-8''
''56-3-27''
------------------------------------------

表TB2 字段 a
------------------------------------------
值 ''ccppvv''
''aatt''
------------------------------------------


如何的到
a a-1 a-2 a-3
---------------------------------------
ccppvv68-34-78 68 34 78
ccppvv3-125-555 3 125 555
aatt44-39-8 44 39 8
56-3-27 56 3 27
---------------------------------------
select a,......
from tb1....

2楼: 1、什么数据库?
2、是否一定为3段式
3、只过滤出数字还是必须通过TB2表过滤,如果有类似 a1b2c68-34-78 这样的数据该如何处理?
4、可以写一个分解字符串的函数 getStrAt(...) 如进销存需求

3楼: 好像用一条SQL语句很难实现...用存储过程吧!

4楼: 建议用存储过程,一条语句太复杂了

5楼: 客户端用户只有查询权限.只要在查询分析器中能生成即可.数据库为MSSQLSERVER

6楼: 我可以解決這個300分的問題,但一定要自定義函數才能解決。

销售管理软件版7楼: select a,case(when a like a1 then replace(a1,a,'''') else a1 end) as a1,a2,a3 from


(select a1,left(T,charindex(''-'',T)-1) as a2,copy(T,charindex(''-'',T)+1,len(T)) as a3 from (select left(a,charindex(''-'',a)-1) as a1,
copy(a,charindex(''-'',a)+1,len(a)) as T from TB1)aa)bb,TB2

8楼: 思考中
表TB2不用也没关系

9楼: 写一个SQL SERVER的自定义函数,返回一个表。

10楼: 表TB1 id a
1 ''ccppvv68-34-78''
1 ''ccppvv3-125-555''
2 ''aatt44-39-8''
0 ''56-3-27''

表TB2 id a
0 ''''
1 ''ccppvv''
2 ''aatt''

建立GetArrayData2自定義函數:
CREATE FUNCTION GetArrayData2(@SumNumber varchar(8000),@Getn int,@Str varchar(1))
RETURNS varchar(8000) AS --返回字符串類型
BEGIN
Declare @tmp varchar(100); Declare @TL Int; DECLARE @X INT; Declare @L Int; DECLARE @GO INT
Set @L = 1 --初始化長度
SET @SumNumber = @SumNumber + @Str + ''0'' --規組字符串
SET @X = 0
SET @TL = 0
Set @tmp = ''''
WHILE @L < LEN(@SumNumber)
BEGIN -- CHARINDEX()
If SubString(@SumNumber, @L,1)=@Str
BEGIN
SET @GO = @L
Set @TL = @TL+1
IF @TL=@GETN-1
SET @X = @GO
IF @TL=@GETN
SET @TMP =(SUBSTRING(@SumNumber,@X+1,@GO-@X-1 ) )
If @TMP <> ''''
Break
END
SET @L = @L+ 1
END
Return @TMP
END

執行SQL語句:
SELECT TB1.a, dbo.GetArrayData2(REPLACE(TB1.a, TB2.a, ''''), 1, ''-'') AS a1,
dbo.GetArrayData2(REPLACE(TB1.a, TB2.a, ''''), 2, ''-'') AS a2,
dbo.GetArrayData2(REPLACE(TB1.a, TB2.a, ''''), 3, ''-'') AS a3
FROM TB1 LEFT OUTER JOIN TB2 ON TB1.id = TB2.id

顯示結果是:
a a1 a2 a3
ccppvv3-125-555 3 125 555
ccppvv68-34-78 68 34 78
aatt44-39-8 44 39 8
56-3-27 56 3 27

11楼: 技術交流QQ:136293586

12楼: 多人接受答案了。 如免费的管家婆软件