SQL - 将文本附加到 SELECT 中的日期时间会产生不需要的操作顺序
TSQL - Appending text to a datetime in the SELECT gives unwanted order of operations
我有一个问题:
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 函数以某种方式应用于字符串的其余部分而不是单独的日期,但我一直无法解决它,因为我是 TSQL 的新手-功能。
知道如何解决这个问题并获得我想要的结果吗?
我使用 TSQL 和 SQL-Server 2008 (rt)。
在您的查询中您添加了两个 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
如果你使用派生的table(嵌套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
如果您希望将最终结果视为文本而不是数字,那么您就违反了 Data Type Precedence when doing the concatenation. You need to 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
我有一个问题:
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 函数以某种方式应用于字符串的其余部分而不是单独的日期,但我一直无法解决它,因为我是 TSQL 的新手-功能。
知道如何解决这个问题并获得我想要的结果吗?
我使用 TSQL 和 SQL-Server 2008 (rt)。
在您的查询中您添加了两个 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
如果你使用派生的table(嵌套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
如果您希望将最终结果视为文本而不是数字,那么您就违反了 Data Type Precedence when doing the concatenation. You need to 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