使用SQL方法创建数据库视图以在多个列中断开

使用SQL方法创建数据库视图以在多个列中断开,sql,database,Sql,Database,我想从我的表中创建一个视图,该表具有数据格式(键值)的列有效性。视图应该有两列,分别称为Key和Value Create view [dbo].[A_V_DATA_T] as Select SUBSTRING(dbo.Table1.Validity, 0, PATINDEX('%-%', dbo.Table1.Validity)) as Key, SUBSTRING(dbo.Table1.Validity, PATINDEX('%-%', dbo.Table1.Validity) +

我想从我的表中创建一个视图,该表具有数据格式(键值)的列有效性。视图应该有两列,分别称为Key和Value

Create view [dbo].[A_V_DATA_T]
as 
Select
SUBSTRING(dbo.Table1.Validity, 0, PATINDEX('%-%', dbo.Table1.Validity))
as Key,
SUBSTRING(dbo.Table1.Validity,
     PATINDEX('%-%', dbo.Table1.Validity) + 1, LEN(dbo.Table1.Validity) )
     as Value
from 
dbo.dbo.Table1
这是正确的/优化的方法吗?是否有任何其他方法可以有效地实现这一点

谢谢
K2G

对于我来说,将键值对存储在一列中根本不是一个好主意。无论如何,正如您所知,分隔符
-
,使用
CHARINDEX()
而不是
PATINDEX()
是一种更好的方法。这是我无权更改的旧数据和表。因此,我计划纠正同样的问题,并计划使用view进行进一步的更改。我对上面的查询表示怀疑,因为我多次使用相同的函数,这是可以避免的。请记住,通过在视图上创建索引来具体化视图,就像在数据上创建唯一的聚集索引IndexName(键,视图)可能
LEFT(value,CHARINDEX('-',dbo.Table1.Validity,0)-1)作为[Key]
是效率更高、可读性更强的代码