SQL:如何从不同列中的行中分割文本?
如果有人能给我一个提示,如何从不同列中包含文本的行中获取数据。下面我将举一个例子。 非常感谢 我有一个名为TEXT的专栏,其中包含: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
<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