2010-03-18 1 views
5

다음은 데이터베이스의 스냅입니다.계산 된 열은 문자열로 표시되어야합니다.

col1과 col2는 모두 int로 선언됩니다. 다음과 같이

내 ComputedColumn 현재 ..., 열 1과 2에 추가하는 대신이의

col1 col2 ComputedColumn 
1  2  3 
4  1  5 

, 열은 1, 2합니다 ( includimg에 가입해야 내 ComputedColumn -에 문자를 '' 중간)을 다음과 같이 입력하십시오.

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(MAX)NVARCHAR(10) 또는 원하는 길이로 바꿀 수 있습니다.

+1

NVARCHAR (MAX)가 과용이라고 생각합니다. INT 값이므로 최대 길이가 있으며 이상한 유니 코드 문자를 포함 할 수 없습니다 !!! 그래서 varchar (11) 괜찮을 것이다. –

+0

@KM 좋은 점, 특히'VARCHAR' 대'NVARCHAR'. 길이는 더 적은 관심사입니다. 행의 전체 길이가 허용되는 행 크기 (4K?)를 초과하지 않는 한, MAX를 사용하는 것과 사용자가 제안하는 11 사이에는 실제적인 차이가 없을 것입니다. – Dathan

+0

이것이 PERSISTED가 아닌 계산 된 열인 경우이 열에서 수행하는 SELECT 수에 따라이 계산을 수백만 회 수행 할 수 있습니다. (MAX) vs (n) 열에서 문자열 연산을 수행 할 때 약간의 오버 헤드가 있다고 생각합니다. 왜 기회가 걸릴 int는 varchar (11)보다 클 수 없습니다. –

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) 
) 

중 값이 null 경우 곰 염두에 다음 ComputedColumn의 결과도 될 것 null

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

(기본 데이터 정렬 및 설정을 사용하여) " + "는 추가 문자와 연결 문자입니다. 명시 적으로 변환 할 수 있지만이 경우 중간에 '-'를 포함하면 암시 적 변환이 발생해야합니다.

+2

나는 그렇지 않다고 생각한다. 여전히 열을 추가합니다. – OrElse

+0

아, 그거 재밌지 만, 왜 그런지 알 것 같아. SELECT 4 + 'a'+ 6은 구문 오류를 반환합니다. "varchar 값 'A'를 데이터 형식 int의 열로 변환하면 암시 적 변환을 잘못 수행해야합니다. 정수 (0), 모두 합산) – BradC

0

COL1과 COL2로 2 열을 추가 디자인 모드에서 테이블을 만들

다른 열 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))) 

)