怎么格式化或拆分列中字段?

ztwz 2009-11-12 09:39:44
最近无聊,想导出QQ聊天记录进行统计,但导出文本有10多MB大,不想程序来判断拆分,这样效率太低 了。
把文本导入sql 2008中,但数据格式导入只有一列,如下:
2009/11/5 22:42:25 100000(100000)
他就在线的上面

2009/11/5 22:42:37 猫(100001)
高人

2009/11/5 22:43:10 风(100002)
不对,这样线没有了

2009/11/5 22:43:19 风(100002)
[表情]

2009/11/5 22:43:27 猫(100001)
还没搞好?

-------------------------------------------------------------------------------------------
所有数据都是一列,我想在sql中直接拆分成
时间 网名 QQ号 聊天内容
这样的四个字段,不知道sql中要怎么实现,偶只会用c#,如是程序中实现感觉要读出又来拆分在插入很是慢,不知道ms sql中有什么好的方法。
...全文
106 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztwz 2009-11-12
  • 打赏
  • 举报
回复
这个偶不用问了,我会了。呵呵。谢谢大家,给分。
SQL77 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 ztwz 的回复:]
试过了SQL77给的sql是可以用的,但导出文本是
2009/11/5 22:42:25 100000(100000)
他就在线的上面

2009/11/5 22:42:37 猫(100001)
高人
这样的,也就是说在sql里每一行是一条记录,我得把第二行的聊天内容合并在第一行时间和网名后面才能用上面的代码,还得去除中间的一行空行,好像这只能用程序做要容易一点。
[/Quote]
这个在程序中肯定方便点啦,呵呵,去C#问问怎么用正则表达式拆分
ztwz 2009-11-12
  • 打赏
  • 举报
回复
试过了SQL77给的sql是可以用的,但导出文本是
2009/11/5 22:42:25 100000(100000)
他就在线的上面

2009/11/5 22:42:37 猫(100001)
高人
这样的,也就是说在sql里每一行是一条记录,我得把第二行的聊天内容合并在第一行时间和网名后面才能用上面的代码,还得去除中间的一行空行,好像这只能用程序做要容易一点。
SQL77 2009-11-12
  • 打赏
  • 举报
回复
declare @t table(col nvarchar(100))
insert @t select N'2009/11/5 22:42:370 猫(100001)
高人'
insert @t select N'2009/11/5 22:43:105 风(100002)
不对,这样线没有了'
insert @t select N'2009/11/5 22:43:194 风(100002)
[表情]'
insert @t select N'2009/11/5 22:43:217 猫(100001)
还没搞好?'


SELECT
SUBSTRING(COL,1,CHARINDEX(' ',COL,12)-1)AS 时间,
SUBSTRING(COL,CHARINDEX(' ',COL,12)+1,CHARINDEX('(',COL)-CHARINDEX(' ',COL,12)-1)AS 网名,
SUBSTRING(COL,CHARINDEX('(',COL,12)+1,CHARINDEX(')',COL)-CHARINDEX('(',COL,12)-1)AS QQ号,
REPLACE(SUBSTRING(COL,CHARINDEX(')',COL)+1,LEN(COL)-CHARINDEX(')',COL,12)),CHAR(13)+CHAR(10),'')AS 内容
FROM @T



时间 网名 QQ号 内容
---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2009/11/5 22:42:370 猫 100001 高人
2009/11/5 22:43:105 风 100002 不对,这样线没有了
2009/11/5 22:43:194 风 100002 [表情]
2009/11/5 22:43:217 猫 100001 还没搞好?

(所影响的行数为 4 行)


增加对时间处理
--小F-- 2009-11-12
  • 打赏
  • 举报
回复
都好强大 有耐心
SQL77 2009-11-12
  • 打赏
  • 举报
回复
declare @t table(col nvarchar(100))
insert @t select N'2009/11/5 22:42:37 猫(100001)
高人'
insert @t select N'2009/11/5 22:43:10 风(100002)
不对,这样线没有了'
insert @t select N'2009/11/5 22:43:19 风(100002)
[表情]'
insert @t select N'2009/11/5 22:43:27 猫(100001)
还没搞好?'


SELECT
SUBSTRING(COL,1,CHARINDEX(' ',COL,12)-1)AS 时间,
SUBSTRING(COL,CHARINDEX(' ',COL,12)+1,CHARINDEX('(',COL)-CHARINDEX(' ',COL,12)-1)AS 网名,
SUBSTRING(COL,CHARINDEX('(',COL,12)+1,CHARINDEX(')',COL)-CHARINDEX('(',COL,12)-1)AS QQ号,
REPLACE(SUBSTRING(COL,CHARINDEX(')',COL)+1,LEN(COL)-CHARINDEX(')',COL,12)),CHAR(13)+CHAR(10),'')AS 内容
FROM @T


(所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 1 行)

时间 网名 QQ号 内容
---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2009/11/5 22:42:37 猫 100001 高人
2009/11/5 22:43:10 风 100002 不对,这样线没有了
2009/11/5 22:43:19 风 100002 [表情]
2009/11/5 22:43:27 猫 100001 还没搞好?

(所影响的行数为 4 行)
水族杰纶 2009-11-12
  • 打赏
  • 举报
回复
declare @t table(col nvarchar(200))
insert @t select N'2009/11/5 22:42:37 猫(100001)
高人'
insert @t select N'2009/11/5 22:43:10 风(100002)
不对,这样线没有了'
insert @t select N'2009/11/5 22:43:19 风(100002)
[表情]'
insert @t select N'2009/11/5 22:43:27 猫(100001)
还没搞好?'
select
left(col,18)日期,
substring(col,charindex(' ',col,charindex(' ',col)+1),charindex('(',col)-charindex(' ',col,charindex(' ',col)+1))網名,
substring(col,charindex('(',col)+1,charindex(')',col)-charindex('(',col)-1)QQ號,
ltrim(replace(replace(right(col,len(col)-charindex(')',col)),char(13),''),char(10),''))內容
from @t
/*
日期 網名 QQ號 內容
------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2009/11/5 22:42:37 猫 100001 高人
2009/11/5 22:43:10 风 100002 不对,这样线没有了
2009/11/5 22:43:19 风 100002 [表情]
2009/11/5 22:43:27 猫 100001 还没搞好?

(4 個資料列受到影響)

*/
SQL77 2009-11-12
  • 打赏
  • 举报
回复
declare @t table(col nvarchar(100))
insert @t select N'2009/11/5 22:42:37 猫(100001)
高人'
insert @t select N'2009/11/5 22:43:10 风(100002)
不对,这样线没有了'
insert @t select N'2009/11/5 22:43:19 风(100002)
[表情]'
insert @t select N'2009/11/5 22:43:27 猫(100001)
还没搞好?'


SELECT
SUBSTRING(COL,1,CHARINDEX(' ',COL,12)-1)AS 时间,
SUBSTRING(COL,CHARINDEX(' ',COL,12)+1,CHARINDEX('(',COL)-CHARINDEX(' ',COL,12)-1)AS 网名,
SUBSTRING(COL,CHARINDEX('(',COL,12)+1,CHARINDEX(')',COL)-CHARINDEX('(',COL,12)-1)AS QQ号,
REPLACE(SUBSTRING(COL,CHARINDEX(')',COL)+1,LEN(COL)-CHARINDEX(')',COL,12)-1),CHAR(13),'')AS 内容
FROM @T


(所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 1 行)

时间 网名 QQ号 内容
---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2009/11/5 22:42:37 猫 100001

2009/11/5 22:43:10 风 100002
不对,这样线没有
2009/11/5 22:43:19 风 100002
[表情
2009/11/5 22:43:27 猫 100001
还没搞好

(所影响的行数为 4 行)
水族杰纶 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fredrickhu 的回复:]
内容还是没有对上 上面一排相对比较好拆
[/Quote]
已經對上了,只是裡面迴車換行顯示的問題~~~
--小F-- 2009-11-12
  • 打赏
  • 举报
回复
内容还是没有对上 上面一排相对比较好拆
fwacky 2009-11-12
  • 打赏
  • 举报
回复

select substring(col,1,19) as 时间,
substring(col,charindex('(',col),len(col)-charindex('(',col)+1 ) as QQ号,
substring(col,19,charindex('(',col)-19) as 网名,
col
from (
select '2009/11/5 22:42:37 小猫(100001)' as col union all
select '2009/11/5 22:43:10 风(100002)' )
A
==============
时间 QQ号 网名
2009/11/5 22:42:37 (100001) 小猫 2009/11/5 22:42:37 小猫(100001)
2009/11/5 22:43:10 (100002) 风 2009/11/5 22:43:10 风(100002)
水族杰纶 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wufeng4552 的回复:]
SQL codedeclare@ttable(colnvarchar(200))insert@tselect N'2009/11/5 22:42:37 猫(100001)
高人'insert@tselect N'2009/11/5 22:43:10 风(100002)
不对,这样线没有了'insert@tselect?-
[/Quote]
更正
declare @t table(col nvarchar(200))
insert @t select N'2009/11/5 22:42:37 猫(100001)
高人'
insert @t select N'2009/11/5 22:43:10 风(100002)
不对,这样线没有了'
insert @t select N'2009/11/5 22:43:19 风(100002)
[表情]'
insert @t select N'2009/11/5 22:43:27 猫(100001)
还没搞好?'
select left(col,18)日期,
substring(col,charindex(' ',col,charindex(' ',col)+1),charindex('(',col)-charindex(' ',col,charindex(' ',col)+1))網名,
substring(col,charindex('(',col)+1,charindex(')',col)-charindex('(',col)-1)QQ號,
right(col,len(col)-charindex(')',col))內容
from @t
/*
日期 網名 QQ號 內容
------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2009/11/5 22:42:37 猫 100001
高人
2009/11/5 22:43:10 风 100002
不对,这样线没有了
2009/11/5 22:43:19 风 100002
[表情]
2009/11/5 22:43:27 猫 100001
还没搞好?

(4 個資料列受到影響)


*/
fwacky 2009-11-12
  • 打赏
  • 举报
回复

select substring(col,1,19),
substring(col,charindex('(',col),len(col)-charindex('(',col)+1 ) ,
substring(col,19,charindex('(',col)-19) ,
col
from (
select '2009/11/5 22:42:37 小猫(100001)' as col union all
select '2009/11/5 22:43:10 风(100002)' )
A

水族杰纶 2009-11-12
  • 打赏
  • 举报
回复
declare @t table(col nvarchar(200))
insert @t select N'2009/11/5 22:42:37 猫(100001)
高人'
insert @t select N'2009/11/5 22:43:10 风(100002)
不对,这样线没有了'
insert @t select N'2009/11/5 22:43:19 风(100002)
[表情]'
insert @t select N'2009/11/5 22:43:27 猫(100001)
还没搞好?'
select left(col,18)日期,
substring(col,charindex(' ',col),charindex('(',col)-charindex(' ',col))網名,
substring(col,charindex('(',col)+1,charindex(')',col)-charindex('(',col)-1)QQ號,
right(col,len(col)-charindex(')',col))內容
from @t
/*
日期 網名 QQ號 內容
------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2009/11/5 22:42:37 22:42:37 猫 100001
高人
2009/11/5 22:43:10 22:43:10 风 100002
不对,这样线没有了
2009/11/5 22:43:19 22:43:19 风 100002
[表情]
2009/11/5 22:43:27 22:43:27 猫 100001
还没搞好?

(4 個資料列受到影響)

*/
SQL77 2009-11-12
  • 打赏
  • 举报
回复
2009/11/5 22:42:25 100000(100000)

第二个空格前为时间,第二个空格后到(这里为网名,()中间为QQ号,后面为内容,

比较复杂
--小F-- 2009-11-12
  • 打赏
  • 举报
回复
聊天记录不好搞啊 在下面一行
上面的可以用字符串拆分来弄

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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