我在提取子字符串时遇到问题。我正在数据库中记录一些SQL查询,需要对其进行筛选。
可能的字符串看起来像以下2个示例:
1. [DatabaseName].[dbo].[TableName$TableExtra]
2. "DatabaseName".dbo."TableName$TableExtra"
我试过这个:
DECLARE @c AS NVARCHAR(MAX) =
'
"DatabaseName".dbo."TableName$TableExtra"
'
SELECT
SUBSTRING(SUBSTRING(@c, PATINDEX('%"DatabaseName".dbo."%', @c) + 20, 100), 1,
PATINDEX('%"%', SUBSTRING(@c, PATINDEX('%"DatabaseName".dbo."%', @c) + 20, 100)) - 1)
这只适用于第二个例子,但适用于第一个例子。
有人能帮助我如何编写适用于两个样本的过滤器吗?
祝度过美好的一天
如果您想提取表名等,可以使用PARSENAME((:
DECLARE @c AS NVARCHAR(MAX) ='"DatabaseName".dbo."TableName$TableExtra"'
SELECT PARSENAME(@c, 1) TableName
, PARSENAME(@c, 2) SchemaName
, PARSENAME(@c, 3) DatabaseName
结果:
+----------------------+------------+--------------+
| TableName | SchemaName | DatabaseName |
+----------------------+------------+--------------+
| TableName$TableExtra | dbo | DatabaseName |
+----------------------+------------+--------------+