Oracle TRUNC 函数在 perl 中不起作用
Oracle TRUNC function doesn't work in perl
我尝试在 my_table 中插入创建的字段。创建的字段具有日期时间类型。在 my_table 中,字段 my_created 具有日期格式。所以我尝试 TRUNC 创建的字段。但是,我在插入截断值时遇到错误 ORA-01830: date format picture ends before converting entire input string
。似乎时间还在,只是重置为00:00。我怎样才能得到没有时间的日期?它只发生在 perl 中。我只得到蟾蜍的约会。
非常简化的代码如下所示:
my $SQL="SELECT
TRUNC(CREATED),
FROM
DBA_OBJECTS";
my $sth = $db->prepare($SQL);
$sth->execute();
my $date = $sth->fetchrow();
$SQL = "INSERT INTO MY_TABLE
(MY_CREATED)
VALUES (?)";
my $stmt = $dbh_master->prepare($SQL);
$stmt->execute($date);
编辑:
我找到了一个丑陋的解决方法,我是这样执行的:
$stmt->execute(substr($date, 0, 10));
不过也许有人有更好的解决方案。
How can I get only the date without time?
在Oracle中,DATE
是一种二进制数据类型,由7个字节组成,分别代表:世纪、year-of-century、月、日、时、分、秒。它 ALWAYS 具有那些二进制组件,因此如果您想要 Oracle DATE
数据类型,那么您需要时间才能获得它。
Oracle DATE
数据类型是 并且早于 ANSI/ISO 标准(1986 年,其中 DATE
没有时间部分)并且 Oracle 有保持与其先前数据类型的向后兼容性,而不是采用 ANSI 标准。
如果您使用 TRUNC(date_value, format_model)
function 那么它会将 DATE
的二进制组件设置为指定格式模型的最小值(0 表示小时、分钟和秒,1 表示天和月),但它会NOT 给你一个没有时间部分的数据类型。
It happens only in perl. I'm getting only date in toad.
不,您正在获取 Toad 中的整个 7 字节二进制值;但是,用户界面只选择向您显示日期组件。首选项中应该有一个设置可以在 Toad 中设置日期格式,这样您就可以看到整个 date-time 组件。
Oracle SQL/Plus 和 SQL 开发人员使用 NLS_DATE_FORMAT
会话参数,Toad 也可以使用它。
如果您想获取 DATE
的值,那么它将始终有一个时间分量(即使您使用 TRUNC
将该时间分量设置为零)。
如果你想获取日期,以便它以一种没有时间组件的方式格式化,那么你需要将它转换为另一种数据类型,并且可以使用 TO_CHAR
将其格式化为字符串:
SELECT TO_CHAR(CREATED, 'YYYY-MM-DD')
FROM DBA_OBJECTS
但是您将返回一个(格式化的)字符串而不是 DATE
数据类型。
我尝试在 my_table 中插入创建的字段。创建的字段具有日期时间类型。在 my_table 中,字段 my_created 具有日期格式。所以我尝试 TRUNC 创建的字段。但是,我在插入截断值时遇到错误 ORA-01830: date format picture ends before converting entire input string
。似乎时间还在,只是重置为00:00。我怎样才能得到没有时间的日期?它只发生在 perl 中。我只得到蟾蜍的约会。
非常简化的代码如下所示:
my $SQL="SELECT
TRUNC(CREATED),
FROM
DBA_OBJECTS";
my $sth = $db->prepare($SQL);
$sth->execute();
my $date = $sth->fetchrow();
$SQL = "INSERT INTO MY_TABLE
(MY_CREATED)
VALUES (?)";
my $stmt = $dbh_master->prepare($SQL);
$stmt->execute($date);
编辑: 我找到了一个丑陋的解决方法,我是这样执行的:
$stmt->execute(substr($date, 0, 10));
不过也许有人有更好的解决方案。
How can I get only the date without time?
在Oracle中,DATE
是一种二进制数据类型,由7个字节组成,分别代表:世纪、year-of-century、月、日、时、分、秒。它 ALWAYS 具有那些二进制组件,因此如果您想要 Oracle DATE
数据类型,那么您需要时间才能获得它。
Oracle DATE
数据类型是 DATE
没有时间部分)并且 Oracle 有保持与其先前数据类型的向后兼容性,而不是采用 ANSI 标准。
如果您使用 TRUNC(date_value, format_model)
function 那么它会将 DATE
的二进制组件设置为指定格式模型的最小值(0 表示小时、分钟和秒,1 表示天和月),但它会NOT 给你一个没有时间部分的数据类型。
It happens only in perl. I'm getting only date in toad.
不,您正在获取 Toad 中的整个 7 字节二进制值;但是,用户界面只选择向您显示日期组件。首选项中应该有一个设置可以在 Toad 中设置日期格式,这样您就可以看到整个 date-time 组件。
Oracle SQL/Plus 和 SQL 开发人员使用 NLS_DATE_FORMAT
会话参数,Toad 也可以使用它。
如果您想获取 DATE
的值,那么它将始终有一个时间分量(即使您使用 TRUNC
将该时间分量设置为零)。
如果你想获取日期,以便它以一种没有时间组件的方式格式化,那么你需要将它转换为另一种数据类型,并且可以使用 TO_CHAR
将其格式化为字符串:
SELECT TO_CHAR(CREATED, 'YYYY-MM-DD')
FROM DBA_OBJECTS
但是您将返回一个(格式化的)字符串而不是 DATE
数据类型。