带时间戳的 DB2 变量

Posted

技术标签:

【中文标题】带时间戳的 DB2 变量【英文标题】:DB2 variable with timestamp 【发布时间】:2013-12-03 20:57:48 【问题描述】:

我根本不熟悉 DB2 语法,所以需要一些指导,下面是我试图在 DB2(8.2.4 版)代码中转换的 ms sql 代码

declare @d datetime, @mydate varchar(16)
set @d = GETDATE()
--create formatted datetime[yyyyMMdd-hhmmss]
set @mydate = convert(varchar,@d,112)+'-  '+convert(varchar,datepart(hh,@d))+convert(varchar,datepart(mi,@d))+convert(varchar,datepart(ss,@d))
select @mydate as MyDate

但是我绝对没有运气,我尝试使用以下语法分配变量

DECLARE c_date Date;
SELECT CURRENT_TIMESTAMP INTO c_date FROM SYSIBM.SYSDUMMY1

没有运气..我也使用另一种格式来创建变量(CREATE VARIABLE),我用谷歌搜索并找到了很少的资源,但由于某些原因,就我而言,我无法做我想做的事情..希望有人能提供一些启示.. 谢谢

【问题讨论】:

定义“不走运”。 DATETIMESTAMP 是不同的数据类型,因此您不能将时间戳值分配给日期变量。首先,您需要将c_date 声明为TIMESTAMP 我尝试了很多方法来为变量赋值,但没有成功。我手头没有我的测试电脑,但是如果你看看我的 MS SQL 代码,你能指导我怎么做达到那个目的? 如果您解释一下您想要实现的目标,我可能会提出一些建议。就像现在一样,您的代码没有多大意义,因为它只显示一个时间戳。我怀疑这就是你所追求的。 我认为我所追求的是以某种方式完全复制我上面发布的 MS SQL 代码,而我无法在 DB2 中执行此操作。一旦我拥有了另一个功能变量中的正确日期值。请查看 SQL 代码并帮助我使用 DB2 复制该代码谢谢 【参考方案1】:

我认为您的问题是 DB2 tiemstamp 与 mysql 或 Oracle 时间戳有很大不同

您可以使用以下系统税来分配时间戳

TSCOL = '2014-12-31-23:59:59.123456'  -- notice microseconds are required !!
TSCOL = '2014-12-31 23:59:59.123456'  -- for newer versions of DB2 with ISO dateformat set!!

TSCOL = TIMESTAMP(DATECOL,TIMECOL)

【讨论】:

实际上不需要微秒,尤其是 DB2 8.2 嗨詹姆斯,我认为由于某些原因我的问题不清楚,我想要为变量分配一个日期,例如说我想要跟随变量 DECLARE VARIABLE myDate varchar(50) 然后我想为其分配一些从查询返回的值,例如 set myDate = Select xyz from tableAbc 我尝试过以下语法以及 select xyz into myDate from tableAbc 这就是我正在努力解决的问题,你能帮我理解为什么不管我试试我似乎无法为变量赋值?【参考方案2】:

您似乎正在尝试获取当前时间戳,但以某种方式格式化。由于 DB2 8.2 没有有用的 TIMESTAMP_FORMAT 函数,您可以使用以下内容:

select 
    cast(int(current date) as char(8)) || '-' || cast(int(current time) as char(6)) as mydate 
from 
    sysibm.sysdummy1

这会返回:

MYDATE              
---------------
20131203-234912

【讨论】:

有关旧的和已弃用的 DB2 版本的更多信息,请查看此信息中心:publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp 当前 DB2 版本为 10.5 你能把查询的输出放在一个变量中吗?那就是我被困的地方......谢谢你的qeury让我更接近 如果您正在编写存储过程,那么当然可以将其分配给变量。 (set myvar = cast...)。但是在存储过程之外你不能,因为 DB2 8.2 不允许复合 SQL。

以上是关于带时间戳的 DB2 变量的主要内容,如果未能解决你的问题,请参考以下文章

需要在 DB2 中使用基于时间戳的 group by 优化慢查询

带时间戳的逻辑删除

使用 Lucene 进行带时间戳的地理空间搜索

如何从 DB2 中的两个时间戳中获取差异?

在 PostgreSQL 中使用带时间戳的 BETWEEN

在带有/不带时区的日期或时间戳的查询中处理 generate_series()