在SQL Server里面经常使用getdate()函数来获取当前时间,它精确到秒,比如查询:select getdate();得到的结果为:2016-06-24 11:36:01.120。但是大部分时候我们只需要知道日期,且是规定格式的日期。此时就需要用CONVERT()函数了。
1、CONVERT()函数的定义和用法:
CONVERT() 函数是把日期转换为新数据类型的通用函数。
CONVERT() 函数可以用不同的格式显示日期/时间数据。
2、CONVERT()函数的语法:
CONVERT(data_type(length),data_to_be_converted,style)
data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。
3、CONVERT()函数第三个参数style的值:
Style ID | 标准 | Style 格式 | 举例输出 CONVERT(VARCHAR(30),GETDATE(),id); |
100 / 0 | Default | mon dd yyyy hh:miAM (或者 PM) | 06 24 2016 11:43AM |
101/1 | USA | mm/dd/yy | 101:06/24/2016 1: 06/24/16 |
102/2 | ANSI | yy.mm.dd | 102:2016.06.24 2: 16.06.24 |
103/3 | British/French | dd/mm/yy | 103: 24/06/2016 3: 24/06/16 |
104/4 | German | dd.mm.yy | 104: 24.06.2016 4: 24.06.16 |
105/5 | Italian | dd-mm-yy | 105: 24-06-2016 5: 24-06-16 |
106/6 |
| dd mon yy | 106: 24 06 2016 6: 24 06 16 |
107/7 |
| Mon dd, yy | 107: 06 24, 2016 7: 06 24, 16 |
108/8 |
| hh:mm:ss | 11:55:15 |
109/9 | Default + milliseconds | mon dd yyyy hh:mi:ss:mmmAM(或者 PM) | 06 24 2016 11:56:19:250AM |
110/10 | USA | mm-dd-yy | 110: 06-24-2016 10: 06-24-16 |
111/11 | JAPAN | yy/mm/dd | 111: 2016/06/24 11: 16/06/24 |
112/12 | ISO | yymmdd | 112: 20160624 12: 160624 |
113/13 | Europe Default + milliseconds | dd mon yyyy hh:mm:ss:mmm(24h) | 24 06 2016 12:01:02:610 |
114/14 |
| hh:mi:ss:mmm(24h) | 12:01:46:353 |
120/20 |
| yyyy-mm-dd hh:mi:ss(24h) | 2016-06-24 12:02:40 |
121/21 |
| yyyy-mm-dd hh:mi:ss.mmm(24h) | 2016-06-24 12:03:34.793 |
126 |
| yyyy-mm-ddThh:mm:ss.mmm(没有空格) | 126: 2016-06-24T12:04:33.930 |
130 |
| dd mon yyyy hh:mi:ss:mmmAM | 19 ????? 1437 12:08:31:213PM |
131 |
| dd/mm/yy hh:mi:ss:mmmAM | 19/09/1437 12:08:31:213PM |
4、补充:
a、几个特殊的:
select getdate():2016-06-24 12:21:08.623(convert函数中121的格式)
select convert(varchar(10),getdate()):06 24 2016(那种格式都不是,100/0的格式有小时和分钟)
b、当CONVERT()函数传入不存在的Style ID则会报错,比如查询“SELECT CONVERT(VARCHAR(30),GETDATE(),26)”就会报错:从 datetime 转换为字符串时,26 不是有效的样式号。
c、这里的varchar(30),指的是获取的字符段的个数(为了让所有的字符串都显示出来所以定义的比较大),比如原本是2016-06-24 12:03:34.793,为了只获取2016-06-24字段,算了下,一共10个字符,所以选择varchar(10),又比如为varchar(7),则为2016-06,又比如:varchar(4),则为2016了。
参考链接:
1、百度知道:SQL获取日期的所有格式:http://zhidao.baidu.com/link?url=-f3UwbhFjUct6VoRS1B8ASeeYIiQd4PZazJWwtjZbE9hyQ0sAu9Suw-WYwI0YUJZHls6L9_QnFphUvZjv9Up_K
2、W3School:SQL Server CONVERT() 函数:http://www.w3school.com.cn/sql/func_convert.asp