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)= 1
source
我认为这真的不应该这么长,但它确实有效。
【讨论】:
只有一种可靠的方法来编写日期,使用日期文字date 'yyyy-mm-dd'
,而您的第一种方法根本不使用这种格式。
感谢您的意见。我试过这种方式WHERE saledate = date'2014-08-01'
这次没有数据。这是因为我的日期列在年/月/日之间使用 / 吗?我不知道为什么我仍然没有得到这个 date
文字的正确结果。
saledate
的确切数据类型是什么? WHERE saledate = date'2014-08-01'
应该适用于 date
和 timestamp
(它会自动转换为日期进行比较)。【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章