1

我在 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

完成此任务的查询/存储过程/函数将是什么?

谢谢

4

5 回答 5

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

问候

于 2013-05-28T09:47:08.993 回答
1

如果您还想生成序列号:

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

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

于 2013-05-28T10:18:56.443 回答
0

尝试类似:

SELECT RIGHT(Value, (SELECT LENGTH(Value) - 6))
于 2013-05-28T09:45:12.340 回答
0

尝试这样的事情,

SELECT RIGHT(DB.Path,SELECT LENGTH(DB.Path) - 6) AS 'Name', DB.Path AS 'Value' FROM DB;
于 2013-05-28T09:45:18.750 回答
0

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

解决方案适用于 MySQL

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

希望能帮助到你...

于 2013-05-28T09:55:06.967 回答