使用SQL数据表中的详细信息提取所需数据

时间:2013-05-28 09:38:23

标签: sql sql-server-2008

我在SQL数据库中有以下数据

Path
------------
Mb\Dbi\Abc
Mb\Dbi\Abc\123
Mb\Dbi\Dks
Mb\Dbi\Abc\Hig
Mb\Dbi\Abc\123\Xyz
Mb\Dbi\Abc
Mb\Dbi\Abc\Hig
Mb\Dbi\Abc\123
Mb\Dbi\Hig
Mb\Dbi\Dks\67H

我想以下面的格式提取上述数据,这里“Mb \ Dbi”保持不变,需要在此之后提取不同的名称,并且还需要它们的确切值路径。

Sr.       Name           Value
1     Abc           Mb\Dbi\Abc
2     Abc\123       Mb\Dbi\Abc\123
3     Dks           Mb\Dbi\Dks
4     Abc\Hig       Mb\Dbi\Abc\Hig
5     Abc\123\Xyz   Mb\DbiAbc\123\Xyz
6     Dks\67H       Mb\Dbi\Dks\67H

实现此目的的查询/存储过程/函数是什么?

由于

5 个答案:

答案 0 :(得分:2)

您尚未指定正在使用的数据库服务器。

无论哪种方式,您都需要搜索替换功能。

在SQL Server中,函数是替换,您可以在此处找到定义:http://msdn.microsoft.com/es-es/library/ms186862(v=sql.105).aspx

您的查询在SQL Server中将如下所示:

Select replace(subquery.path,'Mb\Dbi','') AS Name, subquery.path as Value from (Select distinct path from {yourtable}) subquery

此致

答案 1 :(得分:1)

如果您还想生成序列号:

SELECT (ROW_NUMBER() OVER ( ORDER BY [Path]))   AS [Sr.]
       ,REPLACE ([Path],'Mb\Dbi','')            AS [Name]}
       ,[Path]                                  AS [Value]}
FROM  tbl_PathValues

或者您可以将目标表的列预定义为标识列。

答案 2 :(得分:0)

尝试类似:

SELECT RIGHT(Value, (SELECT LENGTH(Value) - 6))

答案 3 :(得分:0)

尝试这样的事情,

SELECT RIGHT(DB.Path,SELECT LENGTH(DB.Path) - 6) AS 'Name', DB.Path AS 'Value' FROM DB;

答案 4 :(得分:0)

您需要通过转义'\'将数据插入数据库。以下查询将解决您的问题:

解决方案适用于MySQL

SELECT  @rownum := @rownum + 1 AS 'Sr.',SUBSTRING(path, 8) AS `name`, path AS VALUE FROM test_path, (SELECT @rownum := 0) r;

希望它有所帮助...