SQL:如何从不同列中的行中分割文本?

SQL:如何从不同列中的行中分割文本?,sql,sql-server,Sql,Sql Server,如果有人能给我一个提示,如何从不同列中包含文本的行中获取数据。下面我将举一个例子。 非常感谢 我有一个名为TEXT的专栏,其中包含: TEXT <FROM> USER_SCHEMA1.T_POSTAL_CODES <FROM> USER_SCHEMA2.T_USER_NAMES <FROM> USER_SCHEMA3.T_LOCATIONS 如何将其转换为sql 这是我从所有源代码中需要的内容,但要将它放在两列中,一列是SCHEMA\u NAME,一列是TA

如果有人能给我一个提示,如何从不同列中包含文本的行中获取数据。下面我将举一个例子。 非常感谢

我有一个名为TEXT的专栏,其中包含:

TEXT
<FROM> USER_SCHEMA1.T_POSTAL_CODES
<FROM> USER_SCHEMA2.T_USER_NAMES
<FROM> USER_SCHEMA3.T_LOCATIONS
如何将其转换为sql

这是我从所有源代码中需要的内容,但要将它放在两列中,一列是SCHEMA\u NAME,一列是TABLE\u NAME

select * from ALL_SOURCE S
where S.OWNER_NAME like 'FINANCE_SCHEMA%' -- in order to be on the right schema
and S.TEXT like  '<FROM%'; -- what to use next?
感谢您的帮助

使用子字符串和charindex中的东西来查找字符串中第一个句点和/或空格的位置

select 
    schema_name = substring([text]
        , charindex(' ',[text])+1
        , charindex('.',[text])-(charindex(' ',[text])+1)
      )
  , table_name  = stuff([text],1,charindex('.',[text]),'')
from t
rextester演示:

返回:

+--------------+----------------+
| schema_name  |   table_name   |
+--------------+----------------+
| USER_SCHEMA1 | T_POSTAL_CODES |
| USER_SCHEMA2 | T_USER_NAMES   |
| USER_SCHEMA3 | T_LOCATIONS    |
+--------------+----------------+

您可以很容易地利用PARSENAME来实现这一点。我真的建议您停止使用保留字作为列名。它使代码比需要的更具挑战性

with MyTextTable as
(
    select MyText = '<FROM> USER_SCHEMA1.T_POSTAL_CODES' union all
    select '<FROM> USER_SCHEMA2.T_USER_NAMES' union all
    select '<FROM> USER_SCHEMA3.T_LOCATIONS'
)

select *
    , [SCHEMA_NAME] = parsename(REPLACE(MyText, '<FROM> ', ''), 2)
    , TABLE_NAME = parsename(REPLACE(MyText, '<FROM> ', ''), 1)
from MyTextTable
with MyTextTable as
(
    select MyText = '<FROM> USER_SCHEMA1.T_POSTAL_CODES' union all
    select '<FROM> USER_SCHEMA2.T_USER_NAMES' union all
    select '<FROM> USER_SCHEMA3.T_LOCATIONS'
)

select *
    , [SCHEMA_NAME] = parsename(REPLACE(MyText, '<FROM> ', ''), 2)
    , TABLE_NAME = parsename(REPLACE(MyText, '<FROM> ', ''), 1)
from MyTextTable