牛骨文教育服务平台(让学习变的简单)
博文笔记

数据库中substring的使用方法 CONVERT(varchar(12) , getdate(), 112 )

创建时间:2014-09-03 投稿人: 浏览次数:26604

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中不能直接用呀。。。只适应与 sql server 之类的数据库???
select CONVERT(varchar(12) , getdate(), 112 )    类似oracle 中的 to_char(xsdate,"yyyymm")
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 ,该函数用来求一个字符串的字串,该函数的使用频率很高。也不是oracle中的用法
示例字符串:”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) to_char才是王道:oracle

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)


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。