【发布时间】:2011-01-25 02:25:39
【问题描述】:
我们在 SQL Server 中有一些具有持久计算列的表。
Teradata 中是否有类似的功能?如果是这样,语法是什么,有什么限制吗?
我正在查看的特定计算列通过删除前导零来符合某些帐号 - 还会在此符合的帐号上创建索引:
ACCT_NUM_std AS ISNULL(CONVERT(varchar(39),
SUBSTRING(LTRIM(RTRIM([ACCT_NUM])),
PATINDEX('%[^0]%',
LTRIM(RTRIM([ACCT_NUM])) + '.'
),
LEN(LTRIM(RTRIM([ACCT_NUM])))
)
),
''
) PERSISTED
使用 Teradata TRIM 功能,修剪部分会简单一些:
ACCT_NUM_std AS COALESCE(CAST(TRIM(LEADING '0' FROM TRIM(BOTH FROM ACCT_NUM))) AS varchar(39)),
''
)
我想我可以把它变成一个普通的列,并在插入表格的所有进程中放入代码来标准化帐号。我们这样做是为了将标准化代码放在一个地方。
【问题讨论】:
-
我猜您无法使用“计算数据”创建视图并从中获取数据是有原因的?
-
@bogertron 它确实需要被索引,因为有些东西需要加入标准化帐号而有些东西不需要。
-
这是一个很好的理由:)。是的,Teradata 不支持这种机制。我想下一个最佳选择是创建触发器或执行您所做的操作(重新创建逻辑)。没有什么优雅的
标签: sql sql-server database-design calculated-columns teradata