[英]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手册:)
按照他们的手册, x BETWEEN y AND z == ((x> = y)AND(x <= z))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.