有订单表如下
名称(VARCHAR(40) 需求数量,备注(VARCHAR(400)
A电线 100 红色25捆,兰色25捆,绿色30捆,黄色20捆希望得到的结果是如下,数量字段要求是FLOAT型
A电线 红 25
A电线 兰 25
A电线 绿 30
A电线 黄 20
名称(VARCHAR(40) 需求数量,备注(VARCHAR(400)
A电线 100 红色25捆,兰色25捆,绿色30捆,黄色20捆希望得到的结果是如下,数量字段要求是FLOAT型
A电线 红 25
A电线 兰 25
A电线 绿 30
A电线 黄 20
解决方案 »
- SQL 语句合并
- 请教SQL环境
- [Microsoft][ODBC SQL Server Driver][SQL Server]用户 '(null)' 登录失败。原因: 未与信任 SQL Server 连接相关联。
- 参数数据类型 int 对于 patindex 函数的参数 2 无效
- telnet本机的1433是何原因(我已经无分可给了)
- 高手请进!!一定给分的。
- 如何从某一数据库库表中取出10条记录,这10条记录是随机出现的?
- 奇怪!!!!!!!!为何SQL安装好以后能用
- 这条SQL语句该怎么写。
- 我要查询局域网里的其中一台机子上的数据 应怎样写?
- 求一触发器写法
- 求asp+access下一个查询的优化,很难!
drop function [dbo].[f_splitSTR]
GO--3.2.1 循环截取法
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
DECLARE @splitlen int
SET @splitlen=LEN(@split+'a')-2
WHILE CHARINDEX(@split,@s)>0
BEGIN
INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
END
INSERT @re VALUES(@s)
RETURN
END
GO
/*==============================================*/if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_splitSTR]
GO--3.2.3.1 使用临时性分拆辅助表法
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
--创建分拆处理的辅助表(用户定义函数中只能操作表变量)
DECLARE @t TABLE(ID int IDENTITY,b bit)
INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b INSERT @re SELECT SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID)
FROM @t
WHERE ID<=LEN(@s+'a')
AND CHARINDEX(@split,@split+@s,ID)=ID
RETURN
END
GO/*==============================================*/if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_splitSTR]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tb_splitSTR]') and objectproperty(id,N'IsUserTable')=1)
drop table [dbo].[tb_splitSTR]
GO--3.2.3.2 使用永久性分拆辅助表法
--字符串分拆辅助表
SELECT TOP 8000 ID=IDENTITY(int,1,1) INTO dbo.tb_splitSTR
FROM syscolumns a,syscolumns b
GO--字符串分拆处理函数
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS TABLE
AS
RETURN(
SELECT col=CAST(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID) as varchar(100))
FROM tb_splitSTR
WHERE ID<=LEN(@s+'a')
AND CHARINDEX(@split,@split+@s,ID)=ID)
GO
/*==============================================*/if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_splitSTR]
GO--3.2.5 将数据项按数字与非数字再次拆份
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(No varchar(100),Value varchar(20))
AS
BEGIN
--创建分拆处理的辅助表(用户定义函数中只能操作表变量)
DECLARE @t TABLE(ID int IDENTITY,b bit)
INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b INSERT @re
SELECT No=REVERSE(STUFF(col,1,PATINDEX('%[^-^.^0-9]%',col+'a')-1,'')),
Value=REVERSE(LEFT(col,PATINDEX('%[^-^.^0-9]%',col+'a')-1))
FROM(
SELECT col=REVERSE(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID))
FROM @t
WHERE ID<=LEN(@s+'a')
AND CHARINDEX(@split,@split+@s,ID)=ID)a
RETURN
END
GO
declare @sql varchar(8000)
set @sql='a:a:3052169:76:102:张三:100:0:0:0'
set @sql='select '''+replace(@sql,':',''' union all select ''')+''''
exec(@sql)
-- -----------t_mac 小编-------------------
--------------------希望有天成为大虾----
-- =========================================IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb( 名称 varchar(10),需求数量 int,备注 varchar(100) )
go
insert tb SELECT
'A电线', 100 , '红色25捆,兰色25捆,绿色30捆,黄色20捆'
go
select 名称,
颜色=LEFT(东西,1),
数量=cast(reverse(stuff(reverse(STUFF(东西,1,2,'')),1,1,'')) as float)
from(
Select
a.名称,东西=substring(a.备注,b.number,charindex(',',a.备注+',',b.number)-b.number)
from
Tb a join master..spt_values b
ON B.type='p' AND B.number BETWEEN 1 AND LEN(A.备注)
where
substring(','+a.备注,b.number,1)=',') t
go
/*
名称 颜色 数量
---------- ---- ----------------------
A电线 红 25
A电线 兰 25
A电线 绿 30
A电线 黄 20
*/
A电线 100 红色25捆,兰色25捆,绿色30捆,黄色20捆。库存取备注字段,花色写完后,有可能有库存取三个字,也有可能没有?请问要怎么办?