2015-02-06 8 views
-1

나는 쿼리가 있습니다TSQL은 SELECT의 날짜에 텍스트를 덧붙이는 작업의 원치 않는 순서를 제공

SELECT TOP 3 
    Person.Name AS PersonName, 
    YEAR(Person.DateBorn)/100 AS JustCenturyNumbers, 
    Person.PersonNumber AS RestOfDateTimeNumbers, 
    YEAR(Person.DateBorn)/100+Person.PersonNummer AS CompleteDateTimeNumber 
FROM Person 

내가 원하는 것은 같은 완전한 날짜의 숫자 표현을 JustCenturyNumbers에 RestOfDateTimeNumbers를 추가하고 얻을 수 있습니다 :

PersonName JustCenturyNumbers RestOfDateTimeNumbers CompleteDateTimeNumber 
Tim   20     0003167012    200003160000     
Fred  19     0009272725    190009270000     
Jenny  19     0106207228    190106200000  

하지만 내가 얻을 것은 :

PersonName JustCenturyNumbers RestOfDateTimeNumbers CompleteDateTimeNumber 
Tim   20     0003167012    3167032 
Fred  19     0009272725    9272744 
Jenny  19     0106207228    106207247 

것 같아요 그/100-를 functi on은 어떻게 든 날짜 자체가 아닌 문자열의 나머지 부분에 어떻게 든 적용되지만, TSQL 함수를 처음 접했을 때이를 해결할 수 없었습니다.

내가 어떻게이 문제를 해결하고 내가 원하는 결과를 얻을 수 있는지에 대한 아이디어가 있습니까?

TSQL 및 SQL-Server 2008 (rt)을 사용합니다. 두 INT를 추가하는 쿼리에

답변

1

연결을 수행 할 때 Data Type Precedence의 파울로 떨어집니다. 최종 결과가 숫자가 아닌 텍스트로 처리되기를 원하면 CAST 수식의 첫 번째 부분 인 varchar가 필요합니다.

SELECT TOP 3 
    Person.Name AS PersonName, 
    YEAR(Person.DateBorn)/100 AS JustCenturyNumbers, 
    Person.PersonNumber AS RestOfDateTimeNumbers, 
    CAST(YEAR(Person.DateBorn)/100 AS varchar(2)) +Person.PersonNumber AS CompleteDateTimeNumber 
FROM Person 
2

은 진짜 쉽게 당신이 (SELECT 중첩) 파생 테이블을 사용하는 경우 값을 변환하여 문자열 CONCAT에

변화가

SELECT TOP 3 
    Person.Name AS PersonName, 
    YEAR(Person.DateBorn)/100 AS JustCenturyNumbers, 
    Person.PersonNumber AS RestOfDateTimeNumbers, 
    cast(YEAR(Person.DateBorn)/100 as varchar(2))+cast(Person.PersonNummer as varchar(16)) AS CompleteDateTimeNumber 
FROM Person 
0

을 VARCHAR하는 값.

SELECT 
t.*, 
cast(JustCenturyNumbers as varchar(50)) + 
cast(RestOfDateTimeNumbers as varchar(50)) 
as CompleteDateTimeNumber 
FROM 
(
    SELECT TOP 3 
    Person.Name AS PersonName, 
    YEAR(Person.DateBorn)/100 AS JustCenturyNumbers, 
    Person.PersonNumber AS RestOfDateTimeNumbers, 
    FROM Person 
) t