在ORDER BY中使用结果字段

时间:2014-06-04 18:43:58

标签: tsql stored-procedures

我将发布一个简单的例子:

SELECT " CAST(t.PurchaseDate AS DATE) AS PurchaseDate
FROM SomeTable t
ORDER BT PurchaseDate

如何确保ORDER BY将使用PurchaseDate(仅限DATE部分),而不是PurchaseDate表字段?

我知道我可以将CAST结果命名为PurchaseDate2(或其他),但我不认为这是一个非常直观的解决方案。

SELECT " CAST(t.PurchaseDate AS DATE) AS PurchaseDate2
FROM SomeTable t
ORDER BT PurchaseDate2

我也可以再次使用CAST:

ORDER BY CAST(t.PurchaseDate AS DATE)

但我想知道我是否可以避免双CAST?

任何想法如果我们(并且我们可以)在ORDER BY中引用结果字段而不是表字段,当它们具有相同的名称时,我们怎么样?

3 个答案:

答案 0 :(得分:0)

您可以使用下面的CONVERT()功能,只能获得DATE部分

SELECT CONVERT(date, t.PurchaseDate) AS PurchaseDate
FROM SomeTable t
ORDER BT PurchaseDate

首先,您应该将别名更改为不同的实际列名。像NewPurchaseDate这样的东西。不确定为什么要保持它与实际列名相同。

第二,您可以执行以下操作,而不是使用column alias使用order by中的实际转化处理

SELECT CONVERT(date, t.PurchaseDate) AS PurchaseDate
FROM SomeTable t
ORDER BY CONVERT(date, t.PurchaseDate)

答案 1 :(得分:0)

''的语法除了....它不是解决方案,因为order by子句使用表列名,而不是语句别名。如果您正在寻找具体的内容:

SELECT " PurchaseDate
FROM (
   SELECT " CAST(t.PurchaseDate AS DATE) AS PurchaseDate
   FROM SomeTable t
) AnotherTable
ORDER BT PurchaseDate

答案 2 :(得分:0)

没有PurchaseDate2的丑陋因素

SELECT CAST(t.PurchaseDate AS DATE) AS [Purchase Date]
  FROM SomeTable t
 ORDER BY [Purchase Date]