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......餘下全文>>