【发布时间】:2016-01-18 04:07:19
【问题描述】:
我有一个查询,我在其中提取三个字段,并将它们转换为日期。我希望然后在同一个 select 语句中运行比较,但是我在尝试比较的字段上得到一个无效的列名。不过,order by 工作正常。 /scratching_head
SQL Server 2012
SELECT
UTCSID,
UTLCID,
/* put utonmm, utondd, utonyy together as a date called uton */
CAST(
CAST(UTONMM as varchar) + '/' +
CAST(UTONDD as varchar) + '/' +
CASE WHEN UTONCV = '1'
THEN RIGHT('20' + CONVERT(varchar(4), RIGHT('00' + CONVERT(varchar(4), UTONYY),2)),4)
ELSE RIGHT('19' + CONVERT(varchar(4), UTONYY),4)
END
AS DATETIME) AS UTON,
/* put utofmm, utofdd, utofyy together as a date called utoff */
CAST(
CASE WHEN UTOFMM > '0'
THEN
CAST(UTOFMM as varchar) + '/' +
CAST(UTOFDD as varchar) + '/' +
CASE WHEN UTOFCV = '1'
THEN RIGHT('20' + CONVERT(varchar(4), RIGHT('00' + CONVERT(varchar(4), UTOFYY),2)),4)
ELSE RIGHT('19' + CONVERT(varchar(4), UTOFYY),4)
END
END
AS DATETIME) AS UTOFF,
UTCBAL,
UTDBAL,
UTUNPS
FROM [HTEDTA].[THOR].[HTEDTA].UT210AP
WHERE UTLCID = '885570' AND UTOFF > GETDATE() ORDER BY UTON DESC
此语句返回:
Invalid column name: 'UTOFF'
【问题讨论】:
-
我不认为您可以将结果作为列进行比较,即使它似乎以这种方式解决。我知道这样做的唯一方法是使这整个事物成为派生表,并对其进行查询。 (将其包装在另一个 SELECT 语句中。)
标签: sql sql-server tsql date casting