我早两天还不知有CONVERT(varchar(19), getDate(),120) 这些东西呢当时要用 所以写了一个函数(不过好象不支持秒哦,要支持的话也容易扩充) CREATE FUNCTION FormatDate (@inputdate SMALLDATETIME,@formatstring varchar(20)) RETURNS varchar(20) AS BEGIN declare @y varchar(4) declare @m varchar(2) declare @d varchar(2) declare @h varchar(2) declare @n varchar(2) set @y=year(@inputdate) set @m=month(@inputdate) set @d=day(@inputdate) set @h=DATENAME(hh, @inputdate) set @n=DATENAME(n, @inputdate ) set @formatstring=upper(@formatstring) if (charindex('YYYY',@formatstring)=0 and left(@formatstring,4)<>'YYYY') set @y=right(@y,2) if len(@m)=1 set @m="0" +@m if len(@d)=1 set @d="0" +@d if len(@h)=1 set @h="0" +@h if len(@n)=1 set @n="0" +@n declare @i tinyint declare @flag tinyint declare @c char declare @returnstring varchar(20) set @i=0 set @flag=1 set @returnstring=' ' while(@i<len(@formatstring)) begin set @flag=2 if (@i=0) set @flag=1 else if(substring(@formatstring,@i,1)<>substring@formatstring,@i-1,1)) set @flag=1
if (@flag=1) begin if(substring(@formatstring,@i,1)="Y") set @returnstring=@returnstring+@y if(substring(@formatstring,@i,1)="M") set @returnstring=@returnstring+@m if(substring(@formatstring,@i,1)="D") set @returnstring=@returnstring+@d if(substring(@formatstring,@i,1)="H") set @returnstring=@returnstring+@h if(substring(@formatstring,@i,1)="N") set @returnstring=@returnstring+@n if(substring(@formatstring,@i,1)="-" ) set @returnstring=@returnstring+"-" if(substring(@formatstring,@i,1)="/") set @returnstring=@returnstring+"/" if(substring(@formatstring,@i,1)=":") set @returnstring=@returnstring+":" if(substring(@formatstring,@i,1)=" ") set @returnstring=@returnstring+" " end set @i=@i+1 end return ltrim(@returnstring) END
select convert(char(8),getdate(),112) ----20020101
select convert(char(8),getdate(),108) ---06:05:05
convert(varchar(取得位数),getdate(),style)
style如下:
不带世纪数位 (yy) 带世纪数位 (yyyy)
标准
输入/输出**
- 0 或 100 (*) 默认值 mon dd yyyy hh:miAM(或 PM)
1 101 美国 mm/dd/yyyy
2 102 ANSI yy.mm.dd
3 103 英国/法国 dd/mm/yy
4 104 德国 dd.mm.yy
5 105 意大利 dd-mm-yy
6 106 - dd mon yy
7 107 - mon dd, yy
8 108 - hh:mm:ss
- 9 或 109 (*) 默认值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)
10 110 美国 mm-dd-yy
11 111 日本 yy/mm/dd
12 112 ISO yymmdd
- 13 或 113 (*) 欧洲默认值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 或 120 (*) ODBC 规范 yyyy-mm-dd hh:mm:ss[.fff]
- 21 或 121 (*) ODBC 规范(带毫秒) yyyy-mm-dd hh:mm:ss[.fff]
- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(不含空格)
- 130* 科威特 dd mon yyyy hh:mi:ss:mmmAM
- 131* 科威特 dd/mm/yy hh:mi:ss:mmmAM
这些东西呢当时要用 所以写了一个函数(不过好象不支持秒哦,要支持的话也容易扩充)
CREATE FUNCTION FormatDate (@inputdate SMALLDATETIME,@formatstring varchar(20))
RETURNS varchar(20) AS
BEGIN
declare @y varchar(4)
declare @m varchar(2)
declare @d varchar(2)
declare @h varchar(2)
declare @n varchar(2) set @y=year(@inputdate)
set @m=month(@inputdate)
set @d=day(@inputdate)
set @h=DATENAME(hh, @inputdate)
set @n=DATENAME(n, @inputdate ) set @formatstring=upper(@formatstring) if (charindex('YYYY',@formatstring)=0 and left(@formatstring,4)<>'YYYY') set @y=right(@y,2) if len(@m)=1 set @m="0" +@m
if len(@d)=1 set @d="0" +@d
if len(@h)=1 set @h="0" +@h
if len(@n)=1 set @n="0" +@n declare @i tinyint
declare @flag tinyint
declare @c char
declare @returnstring varchar(20) set @i=0
set @flag=1
set @returnstring=' '
while(@i<len(@formatstring))
begin
set @flag=2
if (@i=0)
set @flag=1
else if(substring(@formatstring,@i,1)<>substring@formatstring,@i-1,1))
set @flag=1
if (@flag=1)
begin
if(substring(@formatstring,@i,1)="Y") set @returnstring=@returnstring+@y
if(substring(@formatstring,@i,1)="M") set @returnstring=@returnstring+@m
if(substring(@formatstring,@i,1)="D") set @returnstring=@returnstring+@d
if(substring(@formatstring,@i,1)="H") set @returnstring=@returnstring+@h
if(substring(@formatstring,@i,1)="N") set @returnstring=@returnstring+@n
if(substring(@formatstring,@i,1)="-" ) set @returnstring=@returnstring+"-"
if(substring(@formatstring,@i,1)="/") set @returnstring=@returnstring+"/"
if(substring(@formatstring,@i,1)=":") set @returnstring=@returnstring+":"
if(substring(@formatstring,@i,1)=" ") set @returnstring=@returnstring+" " end set @i=@i+1
end return ltrim(@returnstring)
END
这一版的高手比其他版高手好象要多
:)