sql 拆分字段

萧寒往往 2015-12-07 09:44:39


字段中 的规律是 商品名数量单位价格
没有分割符号 想把详情拆分 成四列 放入新表中 怎么做 , 单位可能会出现在前面的字段中,单位也不固定。
...全文
146 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2015-12-10
  • 打赏
  • 举报
回复
字符串没用逗号(',') 作为分隔,你这语句用不了
萧寒往往 2015-12-10
  • 打赏
  • 举报
回复


DROP TABLE ddb
DROP TABLE ddxq1
go
SELECT
top 88888 id = IDENTITY(int, 1, 1) INTO ddb FROM syscolumns a, syscolumns b
SELECT A.订单编号, A.配送时间,A.下单时间 , A.店铺名称 ,SUBSTRING(A.详情, B.id, CHARINDEX(',', A.详情 + ',', B.id) - B.id)as 详情 into ddxq1
FROM she$ A, ddb B
WHERE SUBSTRING(',' + A.详情, B.id, 1) = ',' and 下单时间 >'20151128' and
下单时间<'20151208'
DROP TABLE ddb
--筛选商品
萧寒往往 2015-12-10
  • 打赏
  • 举报
回复
错了 应该不是你语句的问题 是 之前 语句的问题 能帮忙看看嘛
萧寒往往 2015-12-10
  • 打赏
  • 举报
回复
错了 应该不是你语句的问题 是 之前 语句的问题 能帮忙看看嘛
中国风 2015-12-10
  • 打赏
  • 举报
回复
如最后一步出错时 这样查出错数据
select 
订单编号,配送时间,下单时间,详情,[价格]=REVERSE([价格]),[单位]=REVERSE([单位])
--,[数量]=REVERSE(LEFT([详情2],PATINDEX('%[^0-9]%',[详情2])-1))
--,[商品]=REVERSE(SUBSTRING([详情2],PATINDEX('%[^0-9]%',[详情2]),len([详情2])))
,[详情2]
,PATINDEX('%[^0-9]%',[详情2])-1
,len([详情2])
FROM #T2
WHERE PATINDEX('%[^0-9]%',[详情2])<=1
中国风 2015-12-10
  • 打赏
  • 举报
回复
引用 3 楼 u014051479 的回复:
消息 537,级别 16,状态 5,第 1 行 传递给 LEFT 或 SUBSTRING 函数的长度参数无效。
格式同你贴出来的不一致 按以下步骤执行,看看是那一步出错
select 订单编号,配送时间,下单时间,详情,[详情2]=stuff(REVERSE(详情),1,PATINDEX('%[^.0-9]%',REVERSE(详情))-1,''),[价格]=LEFT(REVERSE(详情),PATINDEX('%[^.0-9]%',REVERSE(详情))-1)  INTO #T1 FROM tabName

SELECT  订单编号
       ,配送时间
       ,下单时间
       ,详情
       ,[价格]
       ,[单位] = LEFT([详情2], PATINDEX('%[0-9]%', [详情2]) - 1)
       ,[详情2] = SUBSTRING([详情2], PATINDEX('%[0-9]%', [详情2]), LEN([详情2]))
INTO #T2
FROM    #T1



select 
订单编号,配送时间,下单时间,详情,[价格]=REVERSE([价格]),[单位]=REVERSE([单位])
,[数量]=REVERSE(LEFT([详情2],PATINDEX('%[^0-9]%',[详情2])-1))
,[商品]=REVERSE(SUBSTRING([详情2],PATINDEX('%[^0-9]%',[详情2]),len([详情2])))
FROM #T2
萧寒往往 2015-12-10
  • 打赏
  • 举报
回复
消息 537,级别 16,状态 5,第 1 行 传递给 LEFT 或 SUBSTRING 函数的长度参数无效。
Tiger_Zhao 2015-12-08
  • 打赏
  • 举报
回复
原始数据用程序切割好再放入数据库。
数据库适合处理结构化的数据,不擅长处理这种不规则的数据。
中国风 2015-12-07
  • 打赏
  • 举报
回复
;with tabName
as
(
select 订单编号=333,配送时间=GETDATE(),下单时间=GETDATE(),详情=N'梨(鸭梨)3份3.9'
)
select 
订单编号,配送时间,下单时间,详情,[价格]=REVERSE([价格]),[单位]=REVERSE([单位])
,[数量]=REVERSE(LEFT([详情2],PATINDEX('%[^0-9]%',[详情2])-1))
,[商品]=REVERSE(SUBSTRING([详情2],PATINDEX('%[^0-9]%',[详情2]),len([详情2])))
from 
(
select 
订单编号,配送时间,下单时间,详情,[价格]
,[单位]=LEFT([详情2],PATINDEX('%[0-9]%',[详情2])-1)
,[详情2]=SUBSTRING([详情2],PATINDEX('%[0-9]%',[详情2]),len([详情2]))
from 
(select 订单编号,配送时间,下单时间,详情,[详情2]=stuff(REVERSE(详情),1,PATINDEX('%[^.0-9]%',REVERSE(详情))-1,''),[价格]=LEFT(REVERSE(详情),PATINDEX('%[^.0-9]%',REVERSE(详情))-1) from tabName)t1
)t2

/*
订单编号	配送时间	下单时间	详情	价格	单位	数量	商品
333	2015-12-07 22:48:49.947	2015-12-07 22:48:49.947	梨(鸭梨)3份3.9	3.9	份	3	梨(鸭梨)
*/

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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