在SQL Server中选择多个已转换的列

时间:2017-05-11 13:33:54

标签: sql sql-server tsql

我有一张这样的表:

name
-----------
45Paris123
23HaNoi456
35Qatar789

这是函数

name1 = mid(name, 3, 8)
name2 = left(name1, 5)
name3 = left(name2, 2)

所以最终的结果是

name3
------
Pa
Ha
Qa

表格和功能都得到了简化。它可能要复杂得多,因此功能组合并不真实可行

我们怎样才能成功?

1 个答案:

答案 0 :(得分:0)

如果我做得对,你想用一列作为另一列的基础。

只有当列存在于表中时才可能。如果你在谈论计算列的别名,答案是否定的。

由于别名不属于select critera,因此您只能选择*column nameexpression

<select_criteria> ::=  
    [ TOP ( top_expression ) ]   
    [ ALL | DISTINCT ]   
    { * | column_name | expression }

但你可以重新计算它:

SELECT  name AS input
        , mid(name,3,8) AS name1
        , left(mid(name,3,8),5) AS name2
        , left(left(mid(name,3,8),5),2) AS name3
FROM    myTable

或使用SELECT ... INTO

select *
into #TempTable
from YourTable

select *
from #TempTable

最好的解决方案是在进入DB之前解决这个问题 这样一个简单的正则表达式:\d+|\D+应该可以解决问题。解释和测试here