sybase數據庫中時間類型轉換以及比較

一. 時間轉換
Sybase 時間處理Convert 的使用
1. 怎樣將datetime類型的日期轉換爲yyyy-mm-dd格式

 SELECT   STR_REPLACE(CONVERT(VARCHAR, GETDATE(), 111) ,'/','-'); 

2. DateTime轉換成Varchar樣式

語句及查詢結果:
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), GETDATE(), 103): 16/05/2006
Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
Select CONVERT(varchar(100), GETDATE(), 112): 20060516
Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513 


3. Sybase中convert函數中第三個參數的格式

sybase下convert函數第三個參數(時間格式)

比如:
1.select user_id,convert(varchar(10),dayts,11) as dates from tb_user    (sybase下及sql server下語句)

2.select to_char(sysdate,'yy/mm/dd') as d from dual    (oracle下語句)

 轉換格式:
0或100 month dd yyyy hh:miampm
1 mm/dd/yy
2 yy.mm.dd
3 dd/mm/yy
4 dd.mm.yy
5 dd-mm-yy
6 dd month yy
7 month dd,yy
8 hh:mi:ss
9或109 month dd yyyy hh:mi:ss:mmmampm
10 mm-dd-yy
11 yy/mm/dd
12 yymmdd
還有100、101、102...和上面的對應,只不過將yy變爲yyyy.
101 mm/dd/yyyy
102 yyyy.mm.dd
103 dd/mm/yyyy
104 dd.mm.yyyy
105 dd-mm-yyyy
106 dd month yyyy
107 month dd,yyyy
108 hh:mi:ss
110 mm-dd-yyyy
111 yyyy/mm/dd
112 yyyymmdd


也可以把幾種格式合在一起:

select rtrim(convert(char,getdate(),111))+''+(convert(char,getdate(),108))  -- yyyy/mm/dd hh:mi:ss

convert(varchar(10),字段名,轉換格式)
cast(cad.id as varchar)  //把cad表的id字段轉換爲varchar字段,其中id字段爲整型
比如:
select user_id,convert(varchar(10),date,11) as date from tb_user


dateadd(日期部分,數值表達式,日期)

select dateadd(dd,10,time) from testDate  //以日子計算,在當前time時間加10天

轉換格式:
0或100 month dd yyyy hh:miampm
1 mm/dd/yy
2 yy.mm.dd
3 dd/mm/yy
4 dd.mm.yy
5 dd-mm-yy
6 dd month yy
7 month dd,yy
8 hh:mi:ss
9或109 month dd yyyy hh:mi:ss:mmmampm
10 mm-dd-yy
11 yy/mm/dd
12 yymmdd
101 mm/dd/yyyy
102 yyyy.mm.dd
103 dd/mm/yyyy
104 dd.mm.yyyy
105 dd-mm-yyyy
106 dd month yyyy
107 month dd,yyyy
108 hh:mi:ss
110 mm-dd-yyyy
111 yyyy/mm/dd
112 yyyymmd

Sybase時間日期函數
2010年05月09日 星期三 下午 06:54

Sybase日期函數 
--------------------------------------------

日期函數
getdate()
得到當前時間,可以設置得到各種時間格式.
datepart(日期部分,日期)
取指定時間的某一個部分,年月天時分秒.
datediff(日期部分,日期1,日期2)
計算指定的日期1和日期2的時間差多少.
dateadd(日期部分,數值表達式,日期)
計算指定時間,再加上表達式指定的時間長度.

--取時間的某一個部分

select datepart(yy,getdate()) --year
select datepart(mm,getdate()) --month
select datepart(dd,getdate()) --day
select datepart(hh,getdate()) --hour
select datepart(mi,getdate()) --min
select datepart(ss,getdate()) --sec

--取星期幾

set datefirst 1
select datepart(weekday,getdate()) --weekday

--字符串時間

select getdate() -- '10/11/12'
select convert(char,getdate(),101) -- '09/27/2010'
select convert(char,getdate(),102) -- '2010.11.12'
select convert(char,getdate(),103) -- '27/09/2010'
select convert(char,getdate(),104) -- '27.09.2010'
select convert(char,getdate(),105) -- '27-09-2010'
select convert(char,getdate(),106) -- '27 Sep 2010'
select convert(char,getdate(),107) --'Sep 27, 2010'
select convert(char,getdate(),108) --'11:16:06'
select convert(char,getdate(),109) --'Sep 27 2010 11:16:28:746AM'
select convert(char,getdate(),110) --'09-27-2010'
select convert(char,getdate(),111) --'2010/09/27'
select convert(char,getdate(),112) --'20100927'
select rtrim(convert(char,getdate(),102))+' '+(convert(char,getdate(),108)) -- '2010.11.12 11:03:41'


在sybase數據庫中,假設表A的時間段時間爲2005-8-19 4:20,
但是在用select語句搜出後結果爲“Aug 19 2005  4:20:04 ”
請問怎麼才能轉換成2005-8-9 4:20這種格式呢。


2BeSybPro如何得出自己需要的時間格式

select substring(convert(char(8),getdate(),112),1,4)+'-'+substring(convert(char(8),getdate(),112),5,2)+'-'+substring(convert(char(8),getdate(),112),7,2)+''+convert(char(5),getdate(),108)


select substring(convert(char(8),getdate(),112),1,4)+'-'+substring(convert(char(8),getdate(),112),5,2)+'-'+substring(convert(char(8),getdate(),112),7,2)+''+convert(char(8),getdate(),108)


--整數時間


select convert(int,convert(char(10),getdate(),112)) -- 20031112
select datepart(hh,getdate())*10000 + datepart(mi,getdate())*100 + datepart(ss,getdate()) -- 110646

--時間格式 "YYYY.MM.DD HH:MI:SS" 轉換爲 "YYYYMMDDHHMISS"

declare @a datetime,@tmp varchar(20),@tmp1 varchar(20)
select @a=convert(datetime,'2004.08.03 12:12:12')
select @tmp=convert(char(10),@a,112)
select @tmp
select @tmp1=convert(char(10),datepart(hh,@a)*10000 + datepart(mi,@a)*100 + datepart(ss,@a))
select @tmp1
select @tmp=@tmp+@tmp1
select @tmp

--當月最後一天

declare
@tmpstr varchar(10)
@mm int,
@premm int,
@curmmlastday varchar(10)
begin
select @mm=datepart(month,getdate())--當月
select @premm=datepart(month,dateadd(month,-1,getdate())) --上個月
if (@mm>=1 and @mm<=8)
select @tmpstr=convert(char(4),datepart(year,getdate()))+'.0'+convert(char(1),datepart(month,dateadd(month,1,getdate())))+'.'+'01'
else if (@mm>=9 and @mm<=11)
select @tmpstr=convert(char(4),datepart(year,getdate()))+'.'+convert(char(2),datepart(month,dateadd(month,1,getdate())))+'.'+'01'
else
select @tmpstr=convert(char(4),datepart(year,dateadd(year,1,getdate())))+'.0'+convert(char(1),datepart(month,dateadd(month,1,getdate())))+'.'+'01'
select @curmmlastday=convert(char(10),dateadd(day,-1,@tmpstr),102) --當月最後一天
end


 declare @st datetime,
         @ft datetime

         set @st = dateadd(dd,-day(dateadd(month,-1,getdate()))+1,dateadd(month,-1,getdate())),    --上個月一號
      @ft = dateadd(dd,-day(getdate())+1,getdate())     ---本月一號
        select rtrim(convert(char,@st,111))+''+(convert(char,@st,108))  -- yyyy/mm/dd hh:mi:ss
        select rtrim(convert(char,@ft,111))+''+(convert(char,@ft,108))  -- yyyy/mm/dd hh:mi:ss

---轉化爲數據格式20091011181960

select cast(datepart(yy,getdate()) as varchar)+right('00'+cast(datepart(mm,getdate())as varchar),2)+right('00'+cast(datepart(dd,getdate())as varchar),2)+
2> right('00'+cast(datepart(hh,getdate())as varchar),2)+right('00'+cast(datepart(dd,getdate())as varchar),2)+right('00'+cast(datepart(ss,getdate())as varchar),2)

*************************
CONVERT 函數 [數據類型轉換]

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

功能 返回轉換成提供的數據類型的表達式。

語法 CONVERT ( data type, expression_r_r_r_r_r_r [ , format-style ] )

參數 data type    表達式將轉換成的數據類型。

expression_r_r_r_r_r_r    要轉換的表達式。

format-style    對於將字符串轉換爲日期或時間數據類型以及相反的轉換過程,format-style 是描述要使用的日期格式字符串的樣式代碼。 format-style 參數的值具有下列含義:

不含世紀 (yy) 含世紀 (yyyy) 輸出 
- 0 或 100 Mmm dd yyyy hh:nn:ss:sss AM(或 PM) 
1 101 mm/dd/yy[yy] 
2 102 [yy]yy.mm.dd 
3 103 dd/mm/yy[yy] 
4 104 dd.mm.yy[yy] 
5 105 dd-mm-yy[yy] 
6 106 dd Mmm yy[yy] 
7 107 Mmm dd, yy[yy] 
8 108 hh:nn:ss 
- 9 或 109 Mmm dd yyyy hh:nn:ss:sssAM(或 PM) 
10 110 mm-dd-yy[yy] 
11 111 [yy]yy/mm/dd 
12 112 [yy]yymmdd 
13 113 dd Mmm yyy hh:nn:ss:sss(24 小時制,歐洲缺省時間 + 毫秒,4 位數年份) 
14 114 hh:nn:ss:sss(24 小時制) 
20 120 yyyy-mm-dd hh:nn:ss:sss(24 小時制,ODBC 規範,4 位數年份) 
21 121 yyyy-mm-dd hh:nn:ss.sss(24 小時制,ODBC 規範加毫秒,4 位數年份) 

ps:在convert的有些轉換類型,在sql service和 sybase中輸出的是不一樣的結果。

二. 在sybase中如果要查詢在某個時間段, 應該寫成:

日期 >= '2012/5/4' and 日期 <'2012/5/5'
ps : 如果寫成between '日期' and '日期' 會報錯.

三. 使用to_char(時間, ‘HH:mm:ss’)方法時需要注意
時間分爲12小時制, 24小時制

‘hh:mm:ss’ 爲12小時制, 轉化的時間爲下午(16:23:23)時, 會轉化成04:23:23
相反: ‘HH:mm:ss’ 爲24小時制, 轉化的時間仍未16:23:23

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章