检查日期语法-teradata SQL

检查日期语法-teradata SQL,sql,teradata,Sql,Teradata,我试图检查日期,但在运行下面的查询后,它不会显示任何结果。有人能给我推荐正确的语法吗 SELECT TOP 10 * FROM MY_DATABASE.AGREEMENT WHERE end_dt=12/31/9999 你问的问题不是很清楚。指定的日期取决于语言。 尝试 从MY_DATABASE.AGREEMENT中选择前10个*,其中end_dt='99991231'您问的问题不是很清楚。指定的日期取决于语言。 尝试 从MY_DATABASE.AGREEMENT中选择前10个*,其中end_

我试图检查日期,但在运行下面的查询后,它不会显示任何结果。有人能给我推荐正确的语法吗

SELECT TOP 10 * FROM MY_DATABASE.AGREEMENT
WHERE end_dt=12/31/9999

你问的问题不是很清楚。指定的日期取决于语言。 尝试
从MY_DATABASE.AGREEMENT中选择前10个*,其中end_dt='99991231'

您问的问题不是很清楚。指定的日期取决于语言。 尝试
从MY_DATABASE.AGREEMENT中选择前10个*,其中end_dt='99991231'
是日期列吗?然后尝试
其中end_dt='9999-12-31'

它是日期列吗?然后尝试
其中end_dt='9999-12-31'
12/31/9999对于您来说可能是一个日期,但对于数据库来说,它是一个计算:

12除以31除以9999,由于这涉及整数除法,因此结果为整数0

最后,将日期与INT进行比较,结果是将日期类型转换为INT

在Teradata中写入日期文字的唯一可靠方法是date后跟格式为YYYY-MM-DD的字符串:

日期'9999-12-31'


类似于时间'12:34:56.1'时间戳'2014-08-20 12:34:56.1'

12/31/9999可能看起来像是一个日期,但对于数据库来说,这是一个计算:

12除以31除以9999,由于这涉及整数除法,因此结果为整数0

最后,将日期与INT进行比较,结果是将日期类型转换为INT

在Teradata中写入日期文字的唯一可靠方法是date后跟格式为YYYY-MM-DD的字符串:

日期'9999-12-31'


与《时间》12:34:56.1和《时间戳》2014-08-20 12:34:56.1类似,我希望更多的人坚持使用唯一可靠的方法在Teradata中编写日期文字。另一方面,我希望Teradata对日期不是那么时髦。@Andrew:你说的“日期时髦”是什么意思?有什么比标准SQL日期“2014-08-21”更简单?没有日期,它只是一个字符串,转换容易出错。而且它比Oracle的TO_DATE('2014-08-21','yyyy-mm-dd')要短得多,似乎大多数Oracle开发人员从未注意到,他们可能会使用标准语法:-)@dnoeth,日期位实际上只是潜在需要的,因为Teradata存储日期的方式(作为带符号的int),是吗?@Andrew:没有日期的“2014-08-21”只是一个字符串,如果列的格式不同,转换为日期可能会失败。Teradata用一个相当愚蠢的计算来存储日期:(年份-1900)*10000+(月份*100)+天,即990811=1999-08-21,1140821=2014-08-21,-9179=1899-08-21我希望更多的人坚持使用唯一可靠的方法在Teradata中写入日期文字。另一方面,我希望Teradata对日期不那么时髦。@Andrew:你说的“对日期时髦”是什么意思?有什么比标准SQL日期“2014-08-21”更简单?没有日期,它只是一个字符串,转换容易出错。而且它比Oracle的TO_DATE('2014-08-21','yyyy-mm-dd')要短得多,似乎大多数Oracle开发人员从未注意到,他们可能会使用标准语法:-)@dnoeth,日期位实际上只是潜在需要的,因为Teradata存储日期的方式(作为带符号的int),是吗?@Andrew:没有日期的“2014-08-21”只是一个字符串,如果列的格式不同,转换为日期可能会失败。Teradata使用一个相当愚蠢的计算来存储日期:(年份-1900)*10000+(月份*100)+天,即990811=1999-08-21,1140821=2014-08-21,-9179=1899-08-21