2015-02-06 37 views
-1

我有一个查询:TSQL - 添加文本在选择日期时间给出的操作不需要为了

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 

我想是到RestOfDateTimeNumbers追加到JustCenturyNumbers,并得到一个完整的日期时间数表示,如:

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

回答

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
在查询中要添加两个int

其更改为字符串连接铸造价值为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))+cast(Person.PersonNummer as varchar(16)) AS CompleteDateTimeNumber 
FROM Person 
0

如果使用派生表(嵌套SELECT),它是真正的轻松。

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