【发布时间】:2014-03-26 17:16:17
【问题描述】:
我正在尝试使用 t-sql 提取两个字符之间的文本。我已经能够将它写在它使信息接近我想要的地方,但由于某种原因,我没有得到我所期望的(惊喜,惊喜)。真的可以用一点帮助来完善它。我正在尝试提取位于两个 [] 之间的部分表名。列数据的示例如下(这是一个记录对数据库所做的所有更改的表,因此列文本基本上是 SQL 语句):
ALTER TABLE [TABLENAME].[MYTABLE] ADD
[VIP_CUSTOMER] [int] NULL
我试图提取表名的一部分,在这个例子中我只想要'MYTABLE'
我现在正在使用:
select SUBSTRING(db.Event_Text, CHARINDEX('.', db.Event_Text) + 2, (CHARINDEX(']', db.Event_Text)) - CHARINDEX('', db.Event_Text) + Len(']')) as OBJName
FROM DBA_AUDIT_EVENT DB
WHERE DATABASE_NAME = 'XYZ'
但是当我使用它时,我并不总是得到所需的结果。有时我得到'MYTABLE] ADD',有时我得到我想要的名字的一部分,有时根据表名的长度,我只得到名字的第一部分,名字的一部分在最后被切断。无论如何要做到这一点,还是有更好的写法?任何帮助将不胜感激。提前致谢。
【问题讨论】:
-
我看到的一个问题是 CHARINDEX('', db.Event_Text) 每次都会返回零。我假设这不是你想要的。
-
捕获这些事件时可以添加这些内容吗?