带时间戳的 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),我用谷歌搜索并找到了很少的资源,但由于某些原因,就我而言,我无法做我想做的事情..希望有人能提供一些启示.. 谢谢
【问题讨论】:
定义“不走运”。DATE
和 TIMESTAMP
是不同的数据类型,因此您不能将时间戳值分配给日期变量。首先,您需要将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 变量的主要内容,如果未能解决你的问题,请参考以下文章