求简单快捷SQL语句,分解字符串。

madStone_l 2013-09-13 03:16:28
现一个字符串,格式如下:车位地址1,车态位状1|车位地址2,车位状态2|.....车位地址n,车位状态n

格式说明:
1.记录之间是用“|”号分隔
2.字段之间是用“,”号分隔

需要将其分解为一个临时表,表结构如下:
CREATE TABLE #Tmp
(
BerthCode VARCHAR(20) ,-- 车位地址
BerthStatus VARCHAR(20)-- 车位位状
)


我实现过用“|”分解为临时表,再“,”分解临时表中的记录。。。
但这样我就创建了4个临时表,才达到效果。。

求快捷,简单的SQL语句达到上述要求(可在存储过程中实现)。谢谢。。。
...全文
81 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
-Tracy-McGrady- 2013-09-13
  • 打赏
  • 举报
回复

declare @str varchar(200)
set @str='车位地址1,车态位状1|车位地址2,车位状态2|车位地址13,车位状态13|车位地址n,车位状态n'
if OBJECT_ID('tmp',N'U')>0 drop table tb
create table tmp(BerthCode VARCHAR(20),BerthStatus VARCHAR(20))
set @str=LTRIM(RTRIM(@str))
if RIGHT(@str,1)<>'|'
  set @str=@str+'|'
while CHARINDEX('|',@str)>0
begin
  insert into tmp(BerthCode,BerthStatus)
  select SUBSTRING(@str,1,CHARINDEX(',',@str)-1),SUBSTRING(@str,CHARINDEX(',',@str)+1,CHARINDEX('|',@str)-1-CHARINDEX(',',@str))
  set @str=STUFF(@str,1,CHARINDEX('|',@str),'')
end
select * from tmp
drop table tmp

--结果
BerthCode            BerthStatus
-------------------- --------------------
车位地址1                车态位状1
车位地址2                车位状态2
车位地址13               车位状态13
车位地址n                车位状态n

(4 行受影响)
發糞塗牆 2013-09-13
  • 打赏
  • 举报
回复
CREATE TABLE test (id INT,[key] NVARCHAR(256))
INSERT INTO test
VALUES(1,'车位地址1,车态位状1|车位地址2,车位状态2|车位地址n,车位状态n')

;WITH cte AS (
SELECT distinct
SUBSTRING([key],number,CHARINDEX('|',[key]+'|',number)-number) as [key]
from
test a,master..spt_values
where
number >=1 and number<len([key])
and type='p'
and substring('|'+[key],number,1)='|')
SELECT SUBSTRING([key],1,CHARINDEX(',',[key],1)-1) AS BerthCode,SUBSTRING([key],CHARINDEX(',',[key],1)+1,LEN([key])) AS [BerthStatus]
FROM cte
/*
BerthCode BerthStatus
------------- -------------------
车位地址1 车态位状1
车位地址2 车位状态2
车位地址n 车位状态n

*/
基于java实现的数据库管理系统 ⼀、需分析说明 通过对数据库系统原理的学习,掌握数据库管理系统的运⾏原理,尝试在给定的DBF⽂件操作框架的物理储存基础上通过java建⽴⼀个数据 库管理系统,以更好的温习学习的知识。 基本功能如下: 实现创建表,并把约束条件存储到建⽴好的数据字典中 为表添加删除列操作和删除表操作 实现对表数据的插⼊操作,并实现插⼊前约束检测 实现对表数据删除操作 实现对表数据的修改操作,修改前对修改数据进⾏约束检测 实现对表数据的查询操作,完成多表查询,单条件多条件查询,单字段排序与多字段排序 实现对输⼊过的SQL语句进⾏系统⽇志记录,并添加时间 界⾯友好,易与操作,通过创建⼀个简单的窗⼝实现对SQL语句的输⼊和对运⾏结果的显⽰ 该系统存在于com.silence.mysql包中,系统⽂件夹⽬录下的data⽂件夹是数据库DBF⽂件的存储⽬录,logs⽂件夹是系统⽇志⽂件⽬录。 该模块是数据库系统的主模块,在包主⽬录下,包括三个类DBMS.java、DBMSForm.java、MyException: DBMS.java:系统的运⾏中⼼,通过输⼊的SQL语句开头将SQL语句传⼊到相应的⼦模块,并对SQL语句进⾏标准化预处理;通过对输⼊ 的正确的SQL语句实现对系统⽇志的记录 DBMSForm.java:系统的显⽰窗⼝,通过单例模式创建⼀个显⽰窗⼝,实现对SQl语句的输⼊操作和对运⾏结果的反馈显⽰,提供接⼝实现 让其他模块运⾏时对UI界⾯的即时刷新,该类中的main函数是系统的运⾏⼊⼝ MyException.java:⾃定义异常,通过接收⼦模块抛出的运⾏时异常,实现将异常反馈输出到UI界⾯中供⽤户参考 该模块在包名下的dbf包中,通过javadbf4.1.jar包提供的DBF⽂件操作函数库,实现对数据库DBF⽂件的读写操作,该模块包括 DBFContent.java和DBFUtils.java两个类。 DBFContent.java:这个是⼀个JavaBean,通过将读取到的DBF中数据存储到这个JavaBean中,实现对数据库中数据的操作 DBFUtils.java:DBF⽂件操作⼯具类,通过对javadbf4.1.jar中函数的调⽤,实现对DBF⽂件的读写操作,提供创建表,插⼊表和查询表 的操作函数 该模块在包名下的where包中,通过对SQL字符串中提取的where块的解析,实现将where语句条件翻译成OR条件组,OR条件组中包括 AND条件组,条件组类中提供对⼀条记录的条件匹配操作函数,进⽽实现对⼀条记录的where条件匹配操作,供数据库⼦模块使⽤。该模块 包括两个类:OrOfWhere.java和AndOfWhere.java: OrOfWhere.java:每个实例代表由OR连接的条件语句块的⼀边,OR语句块中可能包含多个And语句 AndOfWhere.java:每个实例代表⼀个AND连接的条件语句块的⼀边,AND语句块实现了Between…and…、=、<>、<、<=、>、>=条件 匹配 该模块在包名下的module包中,其中包括Create.java、Alter.java、Drop.java、Insert.java、Delete.java、Update.java、Select.java 七个功能,每个模块的构造函数和init()函数执⾏对SQL语句的解析和信息提取,合成可视化的执⾏类,模块中的excuteSQL()函数是该模 块的执⾏函数,执⾏结果返回到DBMSForm中进⾏UI刷新,信息反馈。 通过对Create table Student(列名 数据类型 约束条件 ………);语句的截取得到表名,将"("和")"中间的字符串以逗号分开得到列 字符串,再以空格分解得到列名,类型和约束条件。 通过对DBFUtils.createDBF()函数的调⽤实现表的创建操作,将约束条件作为记录添加到data⽬录下的"constraint.dbf"中实现对约束 条件的数据字典存储,操作过程中,primary key,unique,not null模仿Linux中的权限数的⽅式,primary key为1,unique为2,not null为4,来实现⼀个整数记录三个约束条件的⽬的。 通过对SQL字符串分解析,提取表名、列名和"ADD"、"DROP",将对应数据表中的数据读取到内存中,并根据列名对 DBFContent中的字段数组进⾏增加和删除,再将执⾏后的DBFContent回写⼊DBF⽂件中,实现添加删除列操作。 由于每个数据库表以⼀个⽂件来存储,⽂件名即是表名,删除表操作实际上是提取SQL字符串中的表名,再到data⽂件夹下删除对应的⽂ 件。 根据空格拆分SQL字符串,提取表名和列属性的键值对,通

27,579

社区成员

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

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