【问题标题】:Issue filtering by date按日期过滤问题
【发布时间】:2020-08-28 22:16:40
【问题描述】:

我正在尝试从名为 Date_of_Pay 的列中过滤日期(在 db 工具中使用 alteryx),该列当前是格式为 mm/dd/yyyy 的字符串。我尝试了以下方法:

select table.*
from table
where cast(Date_of_Pay AS date) >= '20140101' AND cast(Date_of_Pay AS date) <= '20141231'
-- alternatively I have tried 
-- where convert(date, Date_of_Pay, 101) >= '20140101' AND convert(date, Date_of_Pay, 101) <= '20141231'

我得到一个错误:

错误读取记录:Microsoft OLE DB Provider for SQL Server:从字符串转换日期和/或时间时转换失败。

我还比较了字符串01/01/2014 和许多其他组合,似乎找不到正确的方法。上述两种方式都适用于一张桌子,但不适用于稍后将与之联合的另一张桌子。我在想第二张表中的数据可能有问题,但我希望有人可能有更多的见解。

【问题讨论】:

  • 您必须向我们展示一些示例数据,以便我们提供任何见解。但是,有大量关于将日期转换为字符串和从字符串转换的信息……您不必看得很远就能找到所需的内容。官方文档总是一个很好的起点。就像将日期存储为日期数据类型而不是字符串一样。
  • 另外,Alteryx 真的是这个问题的相关标签吗?
  • 日期和时间数据类型没有格式,因此不能存储在一个中;它们存储为二进制值。 如果您将存储为varchar,但是,您有一个大问题,需要修复您的设计。将日期存储为date,没有更好的数据类型,varchar 是迄今为止最差的。我可以向您保证,2010 年 1 月 4 日不是在 2020 年 12 月 1 日之后,而是根据您描述的数据。
  • @kakas11 你没有显示 actual 数据,你创建了一个小的测试查询来演示这个问题。无论如何,只要您不包含敏感的列,您最感兴趣的是几乎不是敏感信息的日期列。
  • @kakas11,你不能修改表是有道理的。但是,这里的一种解决方法是尝试重现创建示例表(在您可以使用的数据库中)的问题,并使用确切的列类型作为相关数据。上面其他评论者关于查看有关数据库数据类型的技术文档的建议也是一个好主意。此外,您将此标记为“Alteryx”问题......数据是存储在 Alteryx 中还是在那里显示/报告?

标签: sql sql-server tsql date alteryx


【解决方案1】:

where条件中的双方数据类型应该相同。

您可以像这样将两者都转换为日期:

Select table.*
from table
where convert(date,Date_of_Pay,101) = convert(date,’20140101’,112)

【讨论】:

    【解决方案2】:

    我在以 MM/dd/yyyy 格式存储 [Date_of_Pay] 字符的表中重新创建了询问。小点,你的问题有一个错误,毫米是分钟而不是几个月。我通过以下查询使用了 Connect In-DB 工具。我确保先检查 SSMS 中的查询!

    SELECT table.*
    FROM table
    WHERE CAST(Date_of_Pay AS DATE) >= '20140101'
    AND CAST(Date_of_Pay AS DATE) <= '20141231'
    

    我没有像您那样收到任何此类错误。请在 SSMS 中解决此问题,或者在 Alteryx 之外查询。如果查询有效并返回预期值,则将其粘贴到 Alteryx。正如其他人在 cmets 中提到的那样,我怀疑问题出在表中的数据上。

    我使用 Alteryx 2020.1.5.25447 和 Microsoft SQL Server 2017 (RTM-GDR) (KB4505224) - 14.0.2027.2 (X64) 2019 年 6 月 15 日 00:26:19 版权所有 (C) 2017 Microsoft Corporation Developer Edition (64-bit) o​​n Windows 10 Home 10.0 (Build 18363: )(管理程序)。

    回顾:在 Alteryx 之外直接在表上测试您的查询。你肯定会得到那个错误。在那里修复,然后粘贴到 Alteryx。

    【讨论】:

      猜你喜欢
      • 2018-03-19
      • 2021-11-28
      • 1970-01-01
      • 2018-04-14
      • 2014-03-22
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多