1,插入記錄使用INSERT 語句。
INSERT INTO
tableName(列名列表) VALUES(值列表)
tableName--表明給哪個表中插入記錄
列名列表--表明要給哪幾個列插入值
值列表--插入的具體值
插入新記錄後記得執行以下SQL語句:
COMMIT;
【示例】給顧客表中插入一條新記錄:7,張三,1989-09-02,029-9878998
對於出生日期的值,如果直接採用字符串的形式,那麼日期格式要符合當前會話的nls_date_language和nls_date_format的要求。
可通過select *
from v$nls_parameters;查看當前會話的參數信息;
可以採用DATE關鍵字後跟日期字面量,如:DATE‘1989-09-02’
。這樣能夠顯式將字符串轉換爲日期值,要求日期格式必須是’YYYY-MM-DD’的形式。
eg:
SQL>
insert into customers (customer_id, first_name, last_name, dob,
phone) values(6, 'cissst', 'cissst', to_date('1992-01-01',
'yyyy-mm-dd'), 888-888-8888);
(日期格式要匹配
注意字符串和日期類型 數字類型和字符串類型的區別)
已創建 1
行。
SQL>
select * from customers;
CUSTOMER_ID
FIRST_NAME LAST_NAME DOB
PHONE
-----------
---------- ---------- -------------- ------------
6 cissst
cissst
01-1月 -92
-8888
1 John
Brown
01-1月 -65
800-555-1211
2 Cynthia
Green
05-2月 -68
800-555-1212
3 Steve
White
16-3月 -71
800-555-1213
4 Gail
BLACK
800-555-1214
5 Doreen
Blue
20-5月 -70
1,使用TO_CHAR(x[,format])將日期值轉換爲字符串
x --
一個日期值
format字符串用來說明轉換後的字符串的格式,如果沒有該參數,則使用當前會話中的日期語言和日期格式進行轉換。
format中可使用的格式化參數有:
CC
--兩位的世紀
YYYY --
四位的年份
YY --
兩位的年份
MM --
兩位的月份
MONTH
--月份的完整單詞,全大寫(如果當前會話的日期語言是中文,則顯示:x月)
Month
--月份的完整單詞,首字母大寫
MON
--月份單詞的前三個字母,全大寫 Mon --
月份單詞的前三個字母,首字母大寫
DD --
本月中的第幾天
DAY --
周幾的完整單詞,全大寫
Day
-- 周幾的完整單詞,首字母大寫
Dy --
周幾單詞的前三個字母,首字母大寫
HH24 --
24小時格式的小時
HH --
12小時格式的小時
MI --
分
SS
--秒
【示例】顯示顧客表中的信息,並將出生日期列的值轉換爲”YYYY/MM/DD
Dy”的形式
eg:
SQL>
select sysdate from dual;
SYSDATE
--------------
15-5月 -15
SQL>
select to_char(sysdate) from dual;
TO_CHAR(SYSDAT
--------------
15-5月 -15
SQL>
select to_char(sysdate, 'cc') from dual;
TO
--
21
SQL>
select to_char(sysdate, 'cc yyyy') from dual;
TO_CHAR
-------
21 2015
SQL>
select to_char(sysdate, 'cc yy') from dual;
TO_CH
-----
21 15
SQL>
select to_char(sysdate, 'cc yyyy') from dual;
TO_CHAR
-------
21 2015
SQL>
select to_char(sysdate, 'cc yyyy-mm') from dual;
TO_CHAR(SY
----------
21 2015-05
SQL>
select to_char(sysdate, 'cc yyyy-mon') from dual;
TO_CHAR(SYSDATE,
----------------
21 2015-5月
SQL>
select to_char(sysdate, 'cc yyyy-month') from
dual;
TO_CHAR(SYSDAT
--------------
21 2015-5月
SQL>
select to_char(sysdate, 'cc yyyy-month-dd') from
dual;
TO_CHAR(SYSDATE,'
-----------------
21 2015-5月
-15
SQL>
select to_char(sysdate, 'cc yyyy-dd-mm') from
dual;
TO_CHAR(SYSDA
-------------
21
2015-15-05
SQL>
select to_char(sysdate, 'cc dd/mm/yyyy') from
dual;
TO_CHAR(SYSDA
-------------
21
15/05/2015
SQL>
select to_char(sysdate, 'cc dd/mm/yyyy day') from
dual;
TO_CHAR(SYSDATE,'CCDD/M
-----------------------
21
15/05/2015 星期五
SQL>
select to_char(sysdate, 'cc dd/mm/yyyy day dy') from
dual;
TO_CHAR(SYSDATE,'CCDD/MM/YYYYDAYDY')
------------------------------------
21
15/05/2015 星期五 星期五
SQL>
select to_char(sysdate, 'cc dd/mm/yyyy day dy hh:mi:ss') from
dual;
TO_CHAR(SYSDATE,'CCDD/MM/YYYYDAYDYHH:MI:SS')
---------------------------------------------
21
15/05/2015 星期五 星期五 09:28:32
SQL>
select to_char(sysdate, 'cc dd/mm/yyyy day dy h:mi:s') from
dual;
select
to_char(sysdate, 'cc dd/mm/yyyy day dy h:mi:s') from
dual
*
第 1
行出現錯誤:
ORA-01821:
日期格式無法識別 (必須雙寫 不能單寫)
SQL>
select to_char(sysdate, 'cc dd/mm/yyyy day dy h:mi:ss') from
dual;
select
to_char(sysdate, 'cc dd/mm/yyyy day dy h:mi:ss') from
dual
*
第 1
行出現錯誤:
ORA-01821:
日期格式無法識別
SQL>
select to_char(sysdate, 'cc dd/mm/yyyy day dy hh:mi:ss') from
dual;
TO_CHAR(SYSDATE,'CCDD/MM/YYYYDAYDYHH:MI:SS')
---------------------------------------------
21
15/05/2015 星期五 星期五 09:29:13
SQL>
select customer_id, to_char(dob, 'yyyy/mm/dd dy') from customers
order by customer_id;
CUSTOMER_ID
TO_CHAR(DOB,'YYYY/MM/DD
-----------
-----------------------
1
1965/01/01 星期五
2
1968/02/05 星期一
3
1971/03/16 星期二
4
5
1970/05/20 星期三
6
1992/01/01 星期三
7
1992/01/01 星期三
8
1992/01/01 星期三
2,使用TO_DATE(x[,format])函數將字符串轉換爲日期值
x--一個日期字符串
format--用來說明字符串中的日期格式。格式字符串中可使用的參數和前面一樣。如果沒有該參數,則默認使用當前會話中的日期語言和日期格式進行轉換。
【示例】給顧客表中插入一條新記錄:8,李四,1988-08-11
19:08:23,029-87668899
SQL>
insert into customers values(9, 'jinping', 'xi',
to_date('2015-05-14', 'yyyy-mm-dd'),
'999-999-9999');
注:
(1)轉換時,實際日期值月和日對應的字符位數可以不足,但不能超過寬度。
SQL>
insert into customers values(10, 'jinping', 'xi',
to_date('2015-5-14', 'yyyy-mm-dd'),
'999-999-9999');
(2)
如果實際日期值年份對應的值只有兩位,而格式字符串中是’YYYY’,則轉換後的日期年份前兩位補零。
SQL>
insert into customers values(9, 'jinping', 'xi',
to_date('15-05-14', 'yyyy-mm-dd'),
'999-999-9999');
9 jinping
xi
2014-5月
-15 999-999-9999
;
如果格式字符串中是’YY’,則轉換後的日期年份前兩位和當前系統日期的世紀相同。
SQL>
insert into customers values(9, 'jinping', 'xi',
to_date('15-05-14', 'yy-mm-dd'), '999-999-9999');
9 jinping
xi
2014-5月
-15 999-999-9999
;
如果實際日期值年份對應的值只有兩位,而格式字符串中是’RRRR’或’RR’,則轉換後的日期年份前兩位根據如下規則進行解釋:數據不見啦
百度吧
00-49 年
轉換的年份 00-49
轉換結果 (轉換後的年份前兩位和系統相同) 50- 99
轉換結果(當前系統年份前兩位減一
)
系統 50-99 年
轉換的年份 00-49
轉換結果 (當前系統年份前兩位加一) 50- 99 轉換結果
(轉換後的年份前兩位和系統相同
)
eg:
系統 00-49 年
轉換的年份 00-49
轉換結果 50- 99
轉換結果
2014 2014
2014 2065
1965
系統 50-99 年
轉換的年份 00-49
轉換結果 50- 99
轉換結果
)
2065 2014
2114 2044
2044
三、日期值相關函數
1,ADD_MONTHS(x,y)
返回日期值x加上y個月後的結果。如果y爲負值,則表示減去y個月。
eg:
SQL>
select add_months(sysdate, 1) from dual; (如果大於12個月
則向前加一年)
ADD_MONTHS(SYS
--------------
15-6月 -15
eg:
SQL>
select add_months(sysdate, -26) from dual;
ADD_MONTHS(SYS
--------------
(小於12個月,向後減去一年)
15-3月 -13
2,LAST_DAY(x)
返回日期值x當月的最後一天的日期。
SQL>
select last_day(sysdate) from dual;
LAST_DAY(SYSDA
--------------
31-5月 -15
eg:
SQL>
select to_char(last_day(add_months(sysdate, -3)), 'yyyy-mm-dd')
from dual;
TO_CHAR(LA
----------
(按照格式可以數個函數相疊加)
2015-02-28
3,MONTHS_BETWEEN(x,y)
返回日期x減去日期y後的月份差。
SQL>
select months_between(date'1990-1-1', sysdate) from
dual;
4,NEXT_DAY(x,day)
day--是一個表示星期幾的字符串(和nls_date_language有關,如’saturday’
,’星期六’)
該函數返回從日期x開始,到達下個指定的星期幾的日期
eg:SQL>
select next_day(sysdate, 'sat') from dual;
NEXT_DAY(S
----------
2015-05-16
eg:(寫在中間的小亂入)
SQL>
select to_char(add_months(sysdate, -4), 'mon') from
dual;
TO_CHA
------
jan
SQL>
select to_char(add_months(sysdate, -4), 'month') from
dual;
TO_CHAR(ADD_M
-------------
january
5,ROUND(x[,unit])
對日期進行舍入取整,如果沒有參數unit,則將日期舍入爲最近的一天。如果有參數unit,它表示對指定的單元進行操作。
例如,unit取’YYYY’則表示舍入到最近的年份;‘MM’表示舍入到最近的月份;’HH’表示舍入到最近的分鐘。。。。。。
eg:
SQL>
select round(date'2015-5-19', 'mm') from dual;
ROUND(DATE
----------
(四捨五入到6月)
2015-06-01
SQL>
select round(date'2015-5-19', 'yyyy') from dual;
ROUND(DATE
----------
(四捨五入到最近的一年)
2015-01-01
SQL>
select round(date'2015-8-19', 'yyyy') from dual;
ROUND(DATE
----------
(四捨五入到最近的一年)
2016-01-01
6,TRUNC(x[,unit])
對日期值x進行截斷操作。如果沒有參數unit,則將日期截斷爲當天的開始時間,即00:00:00.
如果參數unit爲‘YYYY’,則表示返回當年的第一天;
如果unit爲‘MM’,則表示返回當月的第一天;
如果unit爲’HH’,則表示將分和秒置爲0.
eg:
SQL>
select trunc(sysdate, 'yyyy') from dual;
TRUNC(SYSD
----------
2015-01-01
四.時間戳
時間戳(timestamp)是一種數據類型,該類型可以存儲一個比較精確的時間點。世紀、四位年份、月、日、小時、分、帶小數位的秒。
TIMESTAMP(second_precision)
second_precision代表秒的小數位寬度,取值在0和9之間。
store模式中的表purchases_with_timestamp中含有時間戳類型的列。
eg:
SQL>
select product_id, customer_id, to_char(made_on, 'cc yyyy-mm-dd
hh:mi:ss') from
purchases_with_timestamp;(select後的選擇內容中可以進行列的tochar操作)
要設置當前會話中的時間戳數據的顯示格式,可以使用如下設置語句:
alter
session set
nls_timestamp_format=‘HH24:MI:SS.FF9’;
1,要給表中插入時間戳類型的數據時,可以在字符串形式的值前面使用TIMESTAMP關鍵字。
例如:TIMESTAMP’2012-09-11
18:23:56.324523321’
當表中該時間戳列的精度小於實際值時,實際值會被自動進行舍入操作。
2,字符串和時間戳值之間的轉換可以使用以下函數:
TO_TIMESTAMP(x,format)
示例:
TO_TIMESTAMP('2012-09-11
19:09:45.9876543','YYYY-MM-DD HH24:MI:SS.FF9')
eg:
SQL>
select systimestamp from dual;
SYSTIMESTAMP
---------------------------------------------------------------------------
15-MAY-15
10.10.05.296000 AM +08:00
eg:(可以選擇中間的一部分 這個可以注意下
選擇少數數據的一種寫法)
SQL>
select to_char(systimestamp, 'mi:ss.ff9') from
dual;
TO_CHAR(SYSTIME
---------------
10:35.234000000
五、時間間隔
時間間隔數據類型用來存儲一段時間長度。Oracle中提供了兩種表示時間間隔的數據類型:
1,INTERVAL
YEAR(precision) TO MONTH
(用於表示n年m月的間隔)
precision表示年數的位數,取值範圍0~9,默認爲2
2,INTERVAL
DAY(precision1) TO SECOND(precision2)
(用於表示n天m秒的間隔)
precision1表示天數的位數,取值範圍0~9,默認爲2
precision2表示秒的小數部分的位數,取值範圍0~9,默認爲6
時間間隔可以是正數,也可以是負數。
coupons表中存儲了優惠券信息,其中的duration列(INTERVAL
YEAR(3) TO MONTH)用來記錄優惠券的有效時間間隔。
如果要給coupons表中duration列插入數據,可使用以下方式得到一個時間間隔值:
1,使用關鍵字:
INTERVAL ‘n-m’ YEAR(x) TO MONTH
示例:
INTERVAL ‘2’
YEAR --年份默認位數爲2
INTERVAL ’2’
YEAR(3) --年份實際值可以小於聲明的位數,但不能超過
INTERVAL ‘3’
MONTH
INTERVAL
‘2-4’ YEAR TO MONTH
INTERVAL
’23-10’ YEAR(3) TO MONTH
INTERVAL
’234-5’ YEAR(3) TO MONTH
eg:
SQL>
insert into coupons values(7, '$99 off test',
to_yminterval('2-3'));
注:年份的位數不能超過表中列的實際類型寬度,否則出錯
2,使用TO_YMINTERVAL(x)函數
x--是形如’y-m‘的字符串
示例:TO_YMINTERVAL(’23-5’)
3,使用NUMTOYMINTERVAL(x,unit)
函數
x--數值
unit--轉換單位,可取值’YEAR’
或‘MONTH’
示例:
NUMTOYMINTERVAL(2.5,’YEAR’)
promotions表用來存儲促銷信息,其中的duration列(INTERVAL
DAY(3) TO SECOND(4))記錄促銷的時間間隔。
如果要給promotions表的duration列插入數據:
1,使用關鍵字:
INTERVAL ‘d h:m:s’ DAY(x) TO
SECOND(y)
示例:
INTERVAL ‘1’
DAY --天的默認位數爲2
INTERVAL ‘4’
MINUTE
INTERVAL
‘34’ SECOND
INTERVAL ‘2
3’ DAY TO HOUR
INTERVAL ‘1
2:2’ DAY TO MINUTE
INTERVAL ‘2
0:0:34’ DAY TO SECOND
INTERVAL
‘123 2:23:45’ DAY(3) TO SECOND
INTERVAL
‘123 2:23:45.678’ DAY(3) TO SECOND(3)
2,使用TO_DSINTERVAL(x)函數
x--是形如’d
h:m:s.f‘的字符串
示例:TO_DSINTERVAL('23
2:23:56.23');
3,使用NUMTODSINTERVAL(x,unit)
函數
x--數值
unit--轉換單位,可取值’DAY’
、‘HOUR’、’MINUTE’、’SECOND’.
示例:
NUMTODSINTERVAL(2.5,’MINUTE’)