檢視字元占用位元組
select
userenv(
'language'),
dump
('我'),
length(
'我')
,--字元數
lengthb(
'我')
,--位元組數
vsize(
'我')
from dual;
to_char函式使用
9 代表乙個數字
0 強迫0顯示
$ 顯示美元符號
l 強制顯示乙個當地的貨幣符號
. 顯示乙個小數點
, 顯示乙個千分位分隔符號
簡單說下吧,剛剛**視窗已經關掉了。
我設計的這個主鍵欄位是varchar2(2)
插入的資料使用了to_char()函式做了轉換
以前只拿這個轉過日期,沒轉過數字---->字串
to_char(1,
'99'
)
我認為這個單純的1到字串1肯定是佔乙個位元組啊,但是系統給我報了字串緩衝區不夠的報錯。我一開始以為是別的原因,百思不得其解,這時候我還沒意識到問題,然後把字段值加大了而已,解決了問題。
這麼說吧,我的a表有乙個記錄主鍵是『1』
我的b表關聯了這個a表
我在b表插入記錄時 我寫的明明就是1 但是報錯了
違反完整約束條件 (tuster.sys_c007187) - 未找到父項關鍵字
我更加百思不得其解了,折騰了可能得乙個多小時吧才醒悟
select lengthb(
'1')
from dual;
--結果是1
select lengthb(to_char(1,
'99'))
from dual;
--結果是3
select lengthb(to_char(1,
'9')
)from dual;
--結果是2
看到這大概也就明白咋回事了
其實我是看的視覺化資料庫先發現的問題,來我們看下視覺化的資料庫
為啥這個4這麼優秀呢,當時4和5都是帶空格的,我真的沒看出來,我把5改了才看出來的,真的一下午把我整瘋了。
網上查詢資料發現,to_char轉換指定格式時,字串前面增加了乙個空格,所以長度比指定格式長度增加了1,網上流傳原因是:那個空格位置是放符號的,正的數字就空了,負的就是乙個『-』號而沒有空格。
解決方法:用trim轉換或者fm
trim掉返回結果中的前後空格
select lengthb(trim(to_char(1,
'99'))
)from dual;
--結果是1
fm代表去掉返回結果中的前後空格和0
select lengthb(to_char(1,
'fm99'))
from dual;
--結果是1
序列和觸發器的使用 實現主鍵自增 Oracle 函式專題 TO CHAR
to char函式提供一套有效的工具用於把各種資料型別 日期 時間,int,float,numeric 轉換成格式化的字串以及反過來從格式化的字串轉換成原始的資料型別 模板一select to char sysdate,模板 from dual 模板如下 hh 一天的小時數 01 12 hh12 一...
Oracle的to char函式使用方法
postgres 格式化函式提供一套有效的工具用於把各種資料型別 日期 時間,int,float,numeric 轉換成格式化的字串以及反過來從格式化的字串轉換成原始的資料型別。注意 所有格式化函式的第二個引數是用於轉換的模板。表 5 7.格式化函式 函式 返回描述 例子to char timest...
Oracle中時間處理 tochar
原文 postgres 格式化函式提供一套有效的工具用於把各種資料型別 日期 時間,int,float,numeric 轉換成格式化的字串以及反過來從格式化的字串轉換成原始的資料型別。注意 所有格式化函式的第二個引數是用於轉換的模板。表 5 7.格式化函式 函式返回 描述例子 to char tim...