oracle資料庫中substring的使用方法 CONVERT(varchar(12) , getdate(), 112 ),substringgetdate

來源:互聯網
上載者:User

oracle資料庫中substring的使用方法 CONVERT(varchar(12) , getdate(), 112 ),substringgetdate

Sqlserver中經常要操作一些時間類型的欄位轉換,我又不太記得住,所以搜集了以下的一些SqlserverConvertDateTime相關的資料發表在自己的小站裡,方便自己以後要用的時候尋找,望對大家也有協助.

將sqlserver中table表的[datetime]欄位值‘2007-11-0716:41:35.033’ 改為‘2007-11-0700:00:00‘去除了時分秒.[datetime]欄位要為datetime類型的哦. UPDATE table SET[datetime]= Convert(char(11),[datetime],120) 

1、擷取當前日期利用 convert 來轉換成我們需要的datetime格式. 貌似 oracle的 PLSQl中不能直接用呀。。。
select CONVERT(varchar(12) , getdate(), 112 )
20040912
------------------------------------------------------------
select CONVERT(varchar(12) , getdate(), 102 )
2004.09.12
------------------------------------------------------------
select CONVERT(varchar(12) , getdate(), 101 )
09/12/2004
------------------------------------------------------------
select CONVERT(varchar(12) , getdate(), 103 )
12/09/2004
------------------------------------------------------------
select CONVERT(varchar(12) , getdate(), 104 )
12.09.2004
------------------------------------------------------------
select CONVERT(varchar(12) , getdate(), 105 )
12-09-2004
------------------------------------------------------------
select CONVERT(varchar(12) , getdate(), 106 )
12 09 2004
------------------------------------------------------------
select CONVERT(varchar(12) , getdate(), 107 )
09 12, 2004
------------------------------------------------------------
select CONVERT(varchar(12) , getdate(), 108 )
11:06:08
------------------------------------------------------------
select CONVERT(varchar(12) , getdate(), 109 )
09 12 2004 1
------------------------------------------------------------
select CONVERT(varchar(12) , getdate(), 110 )
09-12-2004
------------------------------------------------------------
select CONVERT(varchar(12) , getdate(), 113 )
12 09 2004 1
------------------------------------------------------------
select CONVERT(varchar(12) , getdate(), 114 )
11:06:08.177
------------------------------------------------------------

declare @dateTime DateTime--定義一個datetime的變數
set @dateTime=getdate(); --擷取系統目前時間,並賦值給@dateTime欄位

--短日期格式:yyyy-m-d
SELECTREPLACE(CONVERT(varchar(10),@dateTime,120),N'-0','-')

--長日期格式:yyyy年mm月dd日 
SELECTSTUFF(STUFF(CONVERT(char(8),@dateTime,112),5,0,N'年'),8,0,N'月')+N'日'

--長日期格式:yyyy年m月d日
SELECT DATENAME(Year,@dateTime)+N'年'+CAST(DATEPART(Month,@dateTime)AS varchar)+N'月'+DATENAME(Day,@dateTime)+N'日'

--完整日期+時間格式:yyyy-mm-dd hh:mi:ss:mmm
SELECTCONVERT(char(11),@dateTime,120)+CONVERT(char(12),@dateTime,114)

------------------------------------------------------------------------------------------------
2、substring ,該函數用來求一個字串的字串,該函數的使用頻率很高。
樣本字串:”2011-11-17”
在Oracle中求字串的函數為:substr
The syntax for the substr function is:
substr( string, start_position, [ length ] )
string:源字串
start_position:子串第一個字元在源字串中的起始位置
length:子串長度
測試結果:
1.
substr('2011-11-17',0,7)
2011-11
2.
substr('2011-11-17',1,7)
2011-11
3.
substr('2011-11-17',1,10)
2011-11-17
4.
substr('2011-11-17',1,11)
2011-11-17
5.
substr('2011-11-17',-1,7)
7
6.
substr('2011-11-17',-8,8)
11-11-17
7.
substr('2011-11-17',-10,7)
2011-11
8.
substr('2011-11-17',-11,7)
null
9.
substr('2011-11-17',-11)
null
10.
substr('2011-11-17',-1)
7
11.
substr('2011-11-17',6)
11-17
12.
substr('2011-11-17',11)
null
13.
substr (‘2011-11-17’,1,null)
null
14.
substr (‘2011-11-17’,null,1)
null
15.
substr (‘2011-11-17’,null,null)
null
16.
substr ('2011-11-17',1,0)
null
17.
substr ('2011-11-17',1,-1)
null
18.
substr ('2011-11-17',11,11)
null
Oracle中規定:
1)  start_position==0時,子串的起始位置為1,即從第一個字元開始;
2)  start_position<0時,字串的起始位置從字串尾部開始後推。
3)  length參數可以預設

3、日期推算處理

oracle 時間函數(sysdate)

1):取得當前日期是本月的第幾周

SQL> select to_char(sysdate,'YYYYMMDD W HH24:MI:SS') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
20030327 4 18:16:09
SQL> select to_char(sysdate,'W') from dual;
T
-
4

2:取得當前日期是一個星期中的第幾天,注意星期日是第一天

SQL> select sysdate,to_char(sysdate,'D') from dual;
SYSDATE T
--------- -
27-MAR-03 5

  類似:

select to_char(sysdate,'yyyy') from dual; --年
select to_char(sysdate,'Q' from dual; --季
select to_char(sysdate,'mm') from dual; --月
select to_char(sysdate,'dd') from dual; --日
ddd 年中的第幾天
WW 年中的第幾個星期
W 該月中第幾個星期
D 周中的星期幾
hh 小時(12)
hh24 小時(24)
Mi 分
ss 秒

3:取當前日期是星期幾中文顯示:

SQL> select to_char(sysdate,'day') from dual;
TO_CHAR(SYSDATE,'DAY')
----------------------
星期四


4:如果一個表在一個date類型的欄位上面建立了索引,如何使用

alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'


5: 得到當前的日期

select sysdate from dual;


6: 得到當天淩晨0點0分0秒的日期

select trunc(sysdate) from dual;
-- 得到這天的最後一秒
select trunc(sysdate) + 0.99999 from dual;
-- 得到小時的具體數值
select trunc(sysdate) + 1/24 from dual;
select trunc(sysdate) + 7/24 from dual;


7.得到明天淩晨0點0分0秒的日期

select trunc(sysdate+1) from dual;
select trunc(sysdate)+1 from dual;


8: 本月一日的日期

select trunc(sysdate,'mm') from dual;


9:得到下月一日的日期

select trunc(add_months(sysdate,1),'mm') from dual;


10:返回當前月的最後一天?

select last_day(sysdate) from dual;
select last_day(trunc(sysdate)) from dual;
select trunc(last_day(sysdate)) from dual;
select trunc(add_months(sysdate,1),'mm') - 1 from dual;


11: 得到一年的每一天

select trunc(sysdate,'yyyy')+ rn -1 date0
from
(select rownum rn from all_objects
where rownum<366);


12:今天是今年的第N天

SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;


13:如何在給現有的日期加上2年

select add_months(sysdate,24) from dual;


14:判斷某一日子所在年分是否為潤年

select decode(to_char(last_day(trunc(sysdate,'y')+31),'dd'),'29','閏年','平年') from dual;


15:判斷兩年後是否為潤年

select decode(to_char(last_day(trunc(add_months(sysdate,24),'y')+31),'dd'),'29','閏年','平年') from dual;


16):得到日期的季度 
    select ceil(to_number(to_char(sysdate,'mm'))/3) from dual;
    select to_char(sysdate, 'Q') from dual;

四)其餘時間處理方法:

DECLARE @dt datetime

SET @dt=GETDATE()
DECLARE @number int
SET @number=3
--1.指定日期該年的第一天或最後一天
--A. 年的第一天
SELECT CONVERT(char(5),@dt,120)+'1-1'
--B. 年的最後一天
SELECT CONVERT(char(5),@dt,120)+'12-31'
--2.指定日期所在季度的第一天或最後一天
--A. 季度的第一天
SELECT CONVERT(datetime,
CONVERT(char(8),
DATEADD(Month,
DATEPART(Quarter,@dt)*3-Month(@dt)-2,
@dt),
120)+'1')
--B. 季度的最後一天(CASE判斷法)
SELECT CONVERT(datetime,
CONVERT(char(8),
DATEADD(Month,
DATEPART(Quarter,@dt)*3-Month(@dt),
@dt),
120)
+CASE WHEN DATEPART(Quarter,@dt) in(1,4)
THEN '31'ELSE '30' END)
--C. 季度的最後一天(直接推演算法)
SELECT DATEADD(Day,-1,
CONVERT(char(8),
DATEADD(Month,
1+DATEPART(Quarter,@dt)*3-Month(@dt),
@dt),
120)+'1')
--3.指定日期所在月份的第一天或最後一天
--A. 月的第一天
SELECTCONVERT(datetime,CONVERT(char(8),@dt,120)+'1')
--B. 月的最後一天
SELECTDATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,@dt),120)+'1')
--C. 月的最後一天(容易使用的錯誤方法)
SELECT DATEADD(Month,1,DATEADD(Day,-DAY(@dt),@dt))
--4.指定日期所在周的任意一天
SELECTDATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)
--5.指定日期所在周的任意星期幾
--A. 星期天做為一周的第1天
SELECTDATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)
--B. 星期一做為一周的第1天
SELECTDATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)



convert(varchar(8),getdate(),112)用這句來擷取當前日期,後面的參數112是什麼意思?

轉換函式
當 Microsoft® SQL Server™ 2000 不自動執行不同資料類型的運算式轉換時,可使用轉換函式 CAST 和 CONVERT 進行轉換。這些轉換函式還可用來獲得各種特殊的資料格式。這兩個轉換函式都可用於挑選清單、WHERE 子句和允許使用運算式的任何地方。

如果希望 Transact-SQL 程式碼遵從 SQL-92 標準,請使用 CAST 而不要使用 CONVERT。如果要利用 CONVERT 中的樣式功能,請使用 CONVERT 而不要使用 CAST。

使用 CAST 或 CONVERT 時,需要兩條資訊:

要轉換的運算式(例如,銷售報告要求銷售資料從貨幣型資料轉換為字元型資料)。

要將所給運算式轉換到的資料類型,例如,varchar 或 SQL Server 提供的任何其它資料類型。
除非將被轉換的值儲存起來,否則轉換僅在 CAST 或 CONVERT 函數的作用期內有效。

在下面的樣本中,第一個 SELECT 語句中使用 CAST,第二個 SELECT 語句中使用 CONVERT,將 title 列轉換為 char(50) 列,以使結果更可讀:

USE pubs
SELECT CAST(title AS char(50)), ytd_sales
FROM titles
WHERE type = 'trad_cook'



USE pubs
SELECT CONVERT(char(50), title), ytd_sales
FROM titles
WHERE type = 'trad_cook'

下面是結果集:(對任何一個查詢)

ytd_sales
----------------------------------------- -----------
Onions, Leeks, and Garlic: Cooking Secrets of the 375
Fifty Years in Buckingham Palace Kitchens 15096
Sushi, Anyone? 4095

(3 row(s) affected)

在下面的樣本中,int 類型的ytd_sales 列轉換為 char(20) 列,從而可以對該列使用 LIKE 謂詞:

USE pubs
SELECT title, ytd_sales
FROM titles
WHERE CAST(ytd_sales AS char(20)) LIKE '15%'
AND type = 'trad_cook'

下面是結果集:

Title ytd_sales

----------------------------------------- ---------

Fifty Years in Buckingham Palace Kitchens 15096

(1 row(s) affected)

SQL Server 自動處理某些資料類型的轉換。例如,如果比較 char 和 datetim......餘下全文>>
 
CONVERT (VARCHAR,getdate(),23) 後面的23是制定傳回型別 23是制定返回什?

Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06
Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16
Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06
Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06
Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06
Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06
Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06
Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46
Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06
Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16
Select CONVERT(varchar(100), GETDATE(), 12): 060516
Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
Select CONVERT(varchar(100), GETD......餘下全文>>
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.