sql teradata 过滤日期 - 数据库版本 Teradata 15.10.06.02 和提供程序版本 Teradata.Net 15.11.0.0

Posted

技术标签:

【中文标题】sql teradata 过滤日期 - 数据库版本 Teradata 15.10.06.02 和提供程序版本 Teradata.Net 15.11.0.0【英文标题】:sql teradata filtering on date - database version Teradata 15.10.06.02 and provider version Teradata.Net 15.11.0.0 【发布时间】:2018-11-25 15:08:17 【问题描述】:

我的表有一个日期列。它的数据类型是日期。我通过table name>>columns 确认了它,上面写着MTH_END_DT [DATE, Not NULL]

我想过滤特定日期的数据。如果我设置条件where MTH_END_DT = '6/1/2018' 我会收到错误select failed [3535] A character string failed conversion to a numeric value.

我关注了这个page。我使用了where MTH_END_DT = date '6/1/2018',但出现错误syntax error invalid date literal

我试过 where cast(timestamp_column as date) = date '2013-10-22'; 这样的东西,它也抛出错误

我应该如何过滤我的数据?

【问题讨论】:

【参考方案1】:

当我使用 Teradata 为我的查询过滤特定日期时,我确实遇到了类似的问题。我尝试的第一种方法是将“日期”一词如下:

WHERE saledate = DATE'04/08/01' 但这并没有解决问题。

然后我使用了我在冲浪时偶然发现的一种方法,终于奏效了。

WHERE extract(year from saledate)=2004 AND extract(MONTH from saledate)=8 AND extract(DAY from saledate)= 1source

我认为这真的不应该这么长,但它确实有效。

【讨论】:

只有一种可靠的方法来编写日期,使用日期文字date 'yyyy-mm-dd',而您的第一种方法根本不使用这种格式。 感谢您的意见。我试过这种方式WHERE saledate = date'2014-08-01'这次没有数据。这是因为我的日期列在年/月/日之间使用 / 吗?我不知道为什么我仍然没有得到这个 date 文字的正确结果。 saledate 的确切数据类型是什么? WHERE saledate = date'2014-08-01' 应该适用于 datetimestamp(它会自动转换为日期进行比较)。【参考方案2】:

只有一种可靠的方式来编写日期,使用 日期文字date 'yyyy-mm-dd'

where MTH_END_DT = DATE '2018-06-01'

时间戳

TIMESTAMP '2018-06-01 15:34:56'

为了时间

TIME '15:34:56'

在 SQL 助手中,建议在工具-选项-数据格式-以这种格式显示日期

中切换到标准 SQL 格式YYYY-MM-DD

【讨论】:

为答案点赞! :)【参考方案3】:

在我看来,您很可能输入了错误的日期格式?也许它默认包含一个时间。

例如

其中 MTH_END_DT = '2013-10-22-00:00:00:00'

【讨论】:

我复制了一个单元格值,它是8/1/2017 @Ni_Tempe:当您复制单元格值时,您可能指的是根据本地设置格式化日期的 SQL 助手。建议在工具-选项-数据格式-以这种格式显示日期中切换到标准SQL格式YYYY-MM-DD

以上是关于sql teradata 过滤日期 - 数据库版本 Teradata 15.10.06.02 和提供程序版本 Teradata.Net 15.11.0.0的主要内容,如果未能解决你的问题,请参考以下文章

teradata与SQL server有啥区别

Teradata - 列中的词频

Teradata中“日期”数据类型列的最近30天

如何过滤掉 teradata 文本字段中的非数字值?

数据库日期字段选择 long和datatime 哪个效率高

sql Teradata数据库大小