2010-03-18 52 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)))