繁体   English   中英

SQL(Teradata)选择数据

[英]SQL (Teradata) Select data

我有一个与SQL相关的问题(特别是teradata)。 我必须生成1天的报告。

我怎样才能实现它?

例如,在ms访问中,我可以这样做

WHERE DT>=#2011-01-01# and DT<=#2011-0101#

大家伙呢? (SQL Server,而不是MS Access)。

我知道可以使用

DT between '2011-09-01' and '2011-09-02'

但这种方法并不准确。 如何使用ranged WHERE语句指定1天?

我道歉,我没有SQL访问权限,我无法测试它; 因此我要求专业人士的建议。

BETWEEN是包含范围的,所以这样做:

DT between '2011-09-01' and '2011-09-01'

而且,是的,它是精确的:)

现在,如果你的DT是日期时间字段(不是日期字段),那么你必须改变你的方法:

DT >= '2011-09-01' and DT < '2011-09-02'

在Teradata中处理日期可能有点棘手。

如果DT是“时间戳”字段,您只需将其转换为日期即可,因为您只报告了一天,只需测试相等性。

假设你想今天报道,所以传递'03 / 20/2012':

-- Teradata: Select records where DT matches a certain day.
SELECT * -- etc...
WHERE CAST(DT as date) = TO_DATE('03/20/2012', 'mm/dd/yyyy')

MS SQL类似:

SELECT * from [webdb].[mediaguide].[fileDirectories]
WHERE CAST('03/20/2012' AS date) = CAST(DT AS date)

从技术上讲,我会使用参数化来传递日期,但你明白了。

当选择一个范围(特别是日期和时间戳)时,最好做下限包含,上限独占。 也就是说,你想要的东西是lb <= x < ub 在您的情况下,这相当于:

SELECT [list of columns]
FROM [table]
WHERE dt >= :startDate
AND dt < :endDate

:variableName是我在系统上输入主机变量的方式。你必须查看它在teradata上的内容。)
您为之间列出的字符串将按原样运行 - 我认为几乎每个主要的RDBMS都默认识别* ISO格式。

简单的答案是:

WHERE DT BETWEEN Date_X AND Date_X + 1

如果你想明确

WHERE DT BETWEEN Date_X AND Date_X + INTERVAL '1' DAY

你总是可以阅读Teradata手册:)

关于BETWEEN的Teradata手册

按照他们的手册, x BETWEEN y AND z == ((x> = y)AND(x <= z))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM