【问题标题】:Get Day from array of days [duplicate]从天数数组中获取天数[重复]
【发布时间】:2019-06-13 08:28:20
【问题描述】:

我正在尝试在一长串日期 (TxnDate) 中捕获一周中的特定日期。我正在使用的以下命令引发以下错误:

列名“TxnDay”无效。

代码

Select DATENAME(dw, ft.[TxnDate]) as TxnDay, ft.[ProductCode], ft.[Site] from dbo.FactTransactions as Ft 
Where ft.[Site] = '1' and TxnDay = 'Tuesday'

编辑:我也尝试了以下错误:

列名“TxnDay”无效。

Select ft.[TxnDate], ft.[ProductCode], ft.[Site] from 
dbo.FactTransactions as Ft
Where ft.[Site] = '1' and ft.[TxnDate] in (SELECT DATENAME(dw, ft. 
[TxnDate]) as TxnDay where TxnDay = 'Sunday')

【问题讨论】:

  • 消息很清楚。表/视图FactTransactions 上是否存在列TxnDay?您的日期解析不是这里的问题。
  • @EzLo No TxnDate 变为 TxnDay
  • 在这两种情况下,您都在通过 TxnDay 对您的 WHERE 进行过滤,您应该重复您在选择时使用的相同表达式以改为 TnxDay
  • @EzLo 是的 - 确实是重复的! Select DATENAME(dw, ft.[TxnDate]) as TxnDate, ft.[ProductCode], ft.[Site] from dbo.FactTransactions as Ft Where DATENAME(dw, ft.[TxnDate]) = 'Tuesday'

标签: tsql


【解决方案1】:

除非我遗漏了什么,否则我不确定你是否需要 WHERE 子句中的子查询 - 你不能这样做:

select 
    ft.[TxnDate], 
    ft.[ProductCode], 
    ft.[Site] 
from dbo.FactTransactions as ft
Where 
    ft.[Site] = '1' 
    and DATENAME(dw, ft.[TxnDate]) = 'Sunday'

【讨论】:

    【解决方案2】:

    嗨,不要在 where 子句中使用列的别名。解决方案如下。

     Select DATENAME(dw, ft.[TxnDate]) as TxnDay, ft.[ProductCode], ft.[Site] from 
      dbo.FactTransactions as Ft 
      Where ft.[Site] = '1' and DATENAME(dw, ft.[TxnDate])= 'Tuesday'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 2020-10-10
      • 1970-01-01
      相关资源
      最近更新 更多