我嘗試在 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));
但是,也許有人有更好的解決方案。
uj5u.com熱心網友回復:
我怎樣才能只得到沒有時間的日期?
在 Oracle 中,aDATE是一種二進制資料型別,由 7 個位元組組成,分別代表:世紀、世紀、月、日、小時、分鐘和秒。它總是有那些二進制組件,所以如果你想要一個 OracleDATE資料型別,那么你沒有時間就無法獲得它。
OracleDATE資料型別于 1979 年隨 Oracle 版本 2 發布,早于 ANSI/ISO 標準(1986 年,其中 aDATE沒有時間組件),并且 Oracle 保持與其先前資料型別的向后兼容性,而不是采用 ANSI 標準。
如果您使用該TRUNC(date_value, format_model)函式,那么它將將 的二進制組件設定為DATE指定格式模型的最小值(0 表示小時、分鐘和秒,1 表示天和月),但它不會為您提供以下資料型別沒有時間成分。
它只發生在 perl 中。我只得到蟾蜍的約會。
不,您在 Toad 中獲得了整個 7 位元組的二進制值;但是,用戶界面只選擇顯示日期組件。首選項中應該有一個設定,可以設定 Toad 中的日期格式,這將讓您查看整個日期時間組件。
Oracle SQL/Plus 和 SQL Developer 使用NLS_DATE_FORMAT會話引數,Toad 也可以使用它。
如果您想將值作為 a 獲取,DATE那么它將始終具有時間分量(即使您使用 將該時間分量設定為零TRUNC)。
如果要獲取日期以便以不帶時間組件的方式對其進行格式化,則需要將其轉換為另一種資料型別,并可以使用TO_CHAR將其格式化為字串:
SELECT TO_CHAR(CREATED, 'YYYY-MM-DD')
FROM DBA_OBJECTS
但隨后您將回傳一個(格式化的)字串而不是DATE資料型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/475691.html
