2010-03-18 55 views
5

下面是我的数据库的快照。计算列应该是字符串

col1和col2都声明为int。

我ComputedColumn目前增加了1和2列,如下...

col1 col2 ComputedColumn 
1  2  3 
4  1  5 

取而代之的是,我的ComputedColumn应该加入1和2列(includimg的- 在字符 ''中间)如下...

col1 col2 ComputedColumn 
1  2  1-2 
4  1  4-1 

那么,什么是正确的语法?

回答

9

您可能将您的计算列定义为col1+col2。改为尝试CAST(col1 AS NVARCHAR(MAX))+'-'+CAST(col2 AS NVARCHAR(MAX))

或者如果您愿意,您可以用NVARCHAR(10)替换NVARCHAR(MAX)或选择不同的长度。

+1

我觉得NVARCHAR(MAX)是矫枉过正的!,它们是INT,因此有一个最大长度,不能包含任何奇怪的Unicode字符!所以varchar(11)会很好。 – 2010-03-18 19:46:21

+0

@KM好处,特别是在'VARCHAR'与'NVARCHAR'上。长度是一个小问题 - 只要行的总长度不超过允许的行大小(4K?),我相信在使用MAX和你建议的11之间没有实际区别。 – Dathan 2010-03-18 19:53:21

+0

如果这是一个不是PERSISTED的计算列,那么您可能会执行此计算数百万次,具体取决于您在此列上执行多少个SELECT。我认为在(MAX)vs(n)列上进行字符串操作时会有一些开销。为什么抓住机会,int不能大于varchar(11)。 – 2010-03-19 12:09:52

0

简单:

SELECT ComputedColumn = convert(varchar, col1) + '-' + convert(varchar, col2) 
    FROM Table 
2
create table TableName 
(
    col1 int, 
    col2 int, 
    ComputedColumn as Convert(varchar, col1) + '-' + Convert(varchar, col2) 
) 

记住,如果任一值是nullComputedColumn结果也将null(使用默认排序规则和设置)

0
SELECT col1, col2, (col1 + '-' + col2) as ComputedColumn 

“ +“既是加法又是连接字符。你可以明确转换,但在这种情况下,包括中间的' - '应该会导致隐式转换。

+2

我认为它没有。它仍然添加列 – OrElse 2010-03-18 19:36:58

+0

啊,这很有趣,但我想我知道为什么。 SELECT 4 +'a'+ 6返回语法错误“语法错误将varchar值'A'转换为数据类型为int的列',因此它必须以错误的方式执行隐式转换(将其转换为' - '整数(0),然后将它们加在一起) – BradC 2010-03-22 14:10:44

0

在设计模式首先创建表

增加2列COL1和COL2

添加另一列computedcolumn和一套计算列属性

enter image description here

您也可以使用下面的脚本

CREATE TABLE [dbo].[tbl](
[col1] [varchar](50) NOT NULL, 
[col2] [varchar](50) NOT NULL, 
[ComputedColumn] AS ((CONVERT([varchar],[col1],(0))+'-')+CONVERT([varchar],[col2],(0)))