热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

帮忙改下SQL语句

我有一张表(MSG_Inbox)接收短信内容的idSenderMsgTitle113049653413281005,1,18,9,3

 我有一张表(MSG_Inbox)接收短信内容的

id   Sender          MsgTitle
 1   13049653413          281005,1,18,9,3
 2   13049653413          281005,1,18
 3   13049653413          281005,1


 想显示成这样
   Sender  店号 进店状况 小品类1 小品类1 小品类2 小品类3 小品类4 小品类5
 


我的SQL语句是这样的
select id,Sender ,
店号 = parsename(replace(MsgTitle,',','.'), len(MsgTitle) - len(replace(MsgTitle,',',''))+1),
进店状况 = parsename(replace(MsgTitle,',','.'), len(MsgTitle) - len(replace(MsgTitle,',',''))),
小品类1 = parsename(replace(MsgTitle,',','.'), len(MsgTitle) - len(replace(MsgTitle,',',''))-1),

小品类1 = parsename(replace(MsgTitle,',','.'), len(MsgTitle) - len(replace(MsgTitle,',',''))-2),
小品类2 = parsename(replace(MsgTitle,',','.'), len(MsgTitle) - len(replace(MsgTitle,',',''))-3),
小品类3 = parsename(replace(MsgTitle,',','.'), len(MsgTitle) - len(replace(MsgTitle,',',''))-4),
小品类4 = parsename(replace(MsgTitle,',','.'), len(MsgTitle) - len(replace(MsgTitle,',',''))-5),
小品类5 = parsename(replace(MsgTitle,',','.'), len(MsgTitle) - len(replace(MsgTitle,',',''))-6)

from MSG_Inbox

现在我的结果为
id  Sender 店号 进店状况 小品类1 小品类1 小品类2 小品类3 小品类4 小品类5
1,  13049653413 NULL NULL NULL NULL NULL NULL NULL NULL
2,  13049653413 281005 1 18 NULL NULL NULL NULL NULL
3,  13049653413 281005 1 NULL NULL NULL NULL NULL NULL

第一条错误了  没有取到值 不知道什么原因  大家帮我看看!

12 个解决方案

#1


该回复于2010-07-28 09:07:07被版主删除

#2


parsename 只能针对4个,

#3


引用 2 楼 sql77 的回复:
parsename 只能针对4个,
<=4个

#4


引用 2 楼 sql77 的回复:
parsename 只能针对4个,



那要怎么改呢》?

#5


id   Sender             MsgTitle
 1   13049653413             281005,1,18,9,3
 2   13049653413             281005,1,18
 3   13049653413             281005,1

SELECT 
SUBSTRING(MsgTitle,1,CHARINDEX(',',MsgTitle)-1) AS 店号,
PARSENAME(REPLACE(STUFF(MsgTitle,1,CHARINDEX(',',MsgTitle),''),',',''),4),
PARSENAME(REPLACE(STUFF(MsgTitle,1,CHARINDEX(',',MsgTitle),''),',',''),3),
PARSENAME(REPLACE(STUFF(MsgTitle,1,CHARINDEX(',',MsgTitle),''),',',''),2),
PARSENAME(REPLACE(STUFF(MsgTitle,1,CHARINDEX(',',MsgTitle),''),',',''),1)
FROM TB

#6


引用 4 楼 shuihan16 的回复:
引用 2 楼 sql77 的回复:
parsename 只能针对4个,



那要怎么改呢》?

你先把第一个逗号前的取出去

#7


引用 6 楼 sql77 的回复:
引用 4 楼 shuihan16 的回复:
引用 2 楼 sql77 的回复:
parsename 只能针对4个,



那要怎么改呢》?

你先把第一个逗号前的取出去



但是我这里的,可能有9个哦 

#8


IF NOT OBJECT_ID('f_GetStr') IS NULL
DROP FUNCTION [f_GetStr]
GO

--分段截取函数(邹建)
CREATE FUNCTION dbo.f_GetStr(
@s varchar(8000),      --包含多个数据项的字符串
@pos int,             --要获取的数据项的位置
@split varchar(10)     --数据分隔符
)RETURNS varchar(100)
AS
BEGIN
IF @s IS NULL RETURN(NULL)
DECLARE @splitlen int
SELECT @splitlen=LEN(@split+'a')-2
WHILE @pos>1 AND CHARINDEX(@split,@s+@split)>0
SELECT @pos=@pos-1,
@s=STUFF(@s,1,CHARINDEX(@split,@s+@split)+@splitlen,'')
RETURN(ISNULL(LEFT(@s,CHARINDEX(@split,@s+@split)-1),''))
END
GO

--> 生成测试数据表: [tb]
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([id] [int],[Sender] [bigint],[MsgTitle] [nvarchar](20))
INSERT INTO [tb]
SELECT '1','13049653413','281005,1,18,9,3' UNION ALL
SELECT '2','13049653413','281005,1,18' UNION ALL
SELECT '3','13049653413','281005,1'

-->SQL查询如下:

SELECT id,Sender ,
店号 = dbo.f_GetStr(MsgTitle,1,','),
小品类1 = dbo.f_GetStr(MsgTitle,2,','),
小品类2 = dbo.f_GetStr(MsgTitle,3,','),
小品类3 = dbo.f_GetStr(MsgTitle,4,','),
小品类4 = dbo.f_GetStr(MsgTitle,5,',')
FROM [tb]
/*
id          Sender               店号         小品类1       小品类2       小品类3       小品类4
----------- -------------------- ---------- ---------- ---------- ---------- ----------
1           13049653413          281005     1          18         9          3
2           13049653413          281005     1          18                    
3           13049653413          281005     1                                

(3 行受影响)
*/

#9


引用 7 楼 shuihan16 的回复:
引用 6 楼 sql77 的回复:
引用 4 楼 shuihan16 的回复:
引用 2 楼 sql77 的回复:
parsename 只能针对4个,



那要怎么改呢》?

你先把第一个逗号前的取出去



但是我这里的,可能有9个哦

那你换别的函数吧,自己写的函数,SPLIT

#10


引用 5 楼 sql77 的回复:
SQL code
id   Sender             MsgTitle
 1   13049653413             281005,1,18,9,3
 2   13049653413             281005,1,18
 3   13049653413             281005,1

SELECT 
SUBSTRING(MsgTitle……



出来的结果为


id  Sender           店号 (无列名) (无列名) (无列名) (无列名)
1     13049653413 281005 NULL NULL NULL 11893
2     13049653413 281005 NULL NULL NULL 118
3     13049653413 281005 NULL NULL NULL 1

#11


Quote=引用 8 楼 htl258 的回复:]
SQL code
IF NOT OBJECT_ID('f_GetStr') IS NULL
    DROP FUNCTION [f_GetStr]
GO

--分段截取函数(邹建)
CREATE FUNCTION dbo.f_GetStr(
@s varchar(8000),      --包含多个数据项的字符串
@pos int,             --要获取的数据项的位……
[/Quote]


大哥谢谢你啊 很不错的
如果我现在有一张B表代表小品类的
如 id    name
   1     王老吉
   3     多加宝
   9      哇哈哈
  18     红牛


id          Sender         店号         小品类1       小品类2       小品类3       小品类4

1         13049653413       281005     王老吉          红牛      哇哈哈        多加宝2         13049653413       281005     王老吉          红牛                   
3         13049653413       281005     王老吉             



这个样子可以么?




#12



id          Sender         店号         小品类1       小品类2    小品类3   小品类4

1         13049653413       281005     王老吉          红牛      哇哈哈        多加宝2         13049653413       281005     王老吉          红牛                   
3         13049653413       281005     王老吉             







推荐阅读
  • 本文介绍了一个SQL Server自定义函数,用于从字符串中提取仅包含数字和小数点的子串。该函数通过循环删除非数字字符来实现,并附带创建测试表、存储过程以演示其应用。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
  • sqlserver动态分区方案例子
    sqlserver动态分区方案例子当我们存储的数据量比较大时,比如超过千万,上亿级别时单纯的使用索引可能效果不明显了,此时我们可以考虑采 ... [详细]
  • 本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 对象自省自省在计算机编程领域里,是指在运行时判断一个对象的类型和能力。dir能够返回一个列表,列举了一个对象所拥有的属性和方法。my_list[ ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 本文介绍了如何在React和React Native项目中使用JavaScript进行日期格式化,提供了获取近7天、近半年及近一年日期的具体实现方法。 ... [详细]
  • 本文探讨如何利用Java反射技术来模拟Webwork框架中的URL解析过程。通过这一实践,读者可以更好地理解Webwork及其后续版本Struts2的工作原理,尤其是它们在MVC架构下的角色。 ... [详细]
  • 本文介绍 SQL Server 的基本概念和操作,涵盖系统数据库、常用数据类型、表的创建及增删改查等基础操作。通过实例帮助读者快速上手 SQL Server 数据库管理。 ... [详细]
  • LeetCode 剑指 Offer 48. 寻找最长无重复字符子串(中等难度)
    任务:从给定的字符串中找出最长的不含重复字符的子串,并返回该子串的长度。 ... [详细]
author-avatar
LookUp77
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有