我在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
实现此目的的查询/存储过程/函数是什么?
由于
答案 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;
希望它有所帮助...