2

我正在尝试查询具有 varchar(100) "VALUE" 列的表。此列可以包含字母、数字或在本例中为日期的任何内容。

日期将始终作为“YYYY-mm-dd”输入表中。但是,当我运行以下查询时:

select * from myTable
where VALUE =  '2009-12-11' (Date, Format 'yyyy-mm-dd')  

我收到以下错误:

Invalid date supplied for myTable.VALUE.

值表示例:(1,'122') (2,'red') (3,'2009-12-11')

关于可能导致这种情况的任何想法?

谢谢!

4

4 回答 4

2

如果数据类型被声明为 varchar,它应该将其视为字符串。尝试不指定有关日期格式的任何内容,例如

select * from myTable
where VALUE =  '2009-12-11'
于 2010-09-28T21:03:03.980 回答
0

这可能VALUE是 Teradata 中的保留字吗?如果是这样,您需要将其放入双引号中:

选择 *
从我的表
其中“价值”='2009-12-11'
于 2010-12-28T09:24:26.533 回答
0

如果您对查询运行解释,您可以看到它在与您提供的值进行比较之前将值转换为日期。如果您有另一列准确记录了 VALUE 中内容的类型,则可以将其添加到 where 子句中,您将不再收到错误(见下文)。否则,请听从贝丝的建议。

select * from myTable
where VALUE =  '2009-12-11' (Date, Format 'yyyy-mm-dd')
and VALUE_TYPE = 'DATE';
于 2010-09-30T12:32:37.457 回答
0

Teradata 内部日期计算为(year - 1900) * 10000 + (month * 100) + day.

因此,如果日期是 2009 年 2 月 11 日(2010 年 11 月 2 日),那么

=(2009-1900) * 10000 + (11 * 100) + 2
=109 * 10000 + 1100 + 2
=1090000 + 1100 + 2    
=1090000
    1100
       2
----------
 1091102
----------

所以 2009 年 11 月 2 日作为 1091102 存储在 Teradata 中。您可以通过强制转换以所需的格式提取它(就像您在 varchar 中一样)。希望这可以帮助。

于 2010-12-28T08:43:05.647 回答