使用SQL格式化日期(sqlserver) 常用的是在程序里格式化日期,最近想用sql处理更多的事情,一方面可能减轻编程工作量,另一方面可以降低web服务器的负担,不过同时会增加db服务器的负担哦。
简单的两个如下:
--格式2009年1月10日
1. SELECT CAST(YEAR(GETDATE()) AS NVARCHAR) + '年' + CAST(MONTH(GETDATE()) AS NVARCHAR) +'月' + CAST(DAY(GETDATE()) AS NVARCHAR) + '日'
2. SELECT CAST(YEAR(GETDATE()) AS NVARCHAR) + '年' + (CASE WHEN MONTH(GETDATE())<10 THEN '0' ELSE '' END) + CAST(MONTH(GETDATE()) AS NVARCHAR) +'月' + (CASE WHEN DAY(GETDATE())<10 THEN '0' ELSE '' END) + CAST(DAY(GETDATE()) AS NVARCHAR) + '日
但是如果我想要形如yyyymmdd就或yyyymm的格式,怎么办呢?
这里就直接说要yyyymmm格式的吧,这种格式是在yyyymmdd的基础上进行字符串操作,这个包括的方面更多一些,
具体如下:
select SUBSTRING(CONVERT(varchar, getdate(), 112 ),0,7)
看,就这么简单,不过你可能要问了,112是什么意思呢?这就要拿出官方的文档来说话了, SQL server 内置支持格式: 使用 CONVERT 函数: CONVERT (data_type[(length)], expression [, style])
下表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值。给 style 值加 100,可获得包括世纪数位的四位年份 (yyyy)。
不带世纪数位 (yy) (1) |
带世纪数位 (yyyy) |
标准 |
输入/输出 (3) |
- |
0 或 100 (1, 2) |
默认 |
mon dd yyyy hh:miAM(或 PM) |
1 |
101 |
美国 |
mm/dd/yyyy |
2 |
102 |
ANSI |
yy.mm.dd |
3 |
103 |
英国/法国 |
dd/mm/yyyy |
4 |
104 |
德国 |
dd.mm.yy |
5 |
105 |
意大利 |
dd-mm-yy |
6 |
106 (1) |
- |
dd mon yy |
7 |
107 (1) |
- |
mon dd, yy |
8 |
108 |
- |
hh:mi:ss |
- |
9 或 109 (1, 2) |
默认设置 + 毫秒 |
mon dd yyyy hh:mi:ss:mmmAM(或 PM) |
10 |
110 |
美国 |
mm-dd-yy |
11 |
111 |
日本 |
yy/mm/dd |
12 |
112 |
ISO |
yymmdd yyyymmdd |
- |
13 或 113 (1, 2) |
欧洲默认设置 + 毫秒 |
dd mon yyyy hh:mi:ss:mmm(24h) |
14 |
114 |
- |
hh:mi:ss:mmm(24h) |
- |
20 或 120 (2) |
ODBC 规范 |
yyyy-mm-dd hh:mi:ss(24h) |
- |
21 或 121 (2) |
ODBC 规范(带毫秒) |
yyyy-mm-dd hh:mi:ss.mmm(24h) |
- |
126 (4) |
ISO8601 |
yyyy-mm-ddThh:mi:ss.mmm(无空格) |
- |
127(6, 7) |
带时区 Z 的 ISO8601。 |
yyyy-mm-ddThh:mi:ss.mmmZ (无空格) |
- |
130 (1, 2) |
回历 (5) |
dd mon yyyy hh:mi:ss:mmmAM |
- |
131 (2) |
回历 (5) |
dd/mm/yy hh:mi:ss:mmmAM |
* 默认值(style 0 或 100、9 或 109、13 或 113、20 或 120、21 或 121)始终返回世纪数位 (yyyy)。 ** 当转换为 datetime 时输入;当转换为字符数据时输出。 更多信息参见:SQL 联机丛书
格式化建议: 正常情况下,我们不需要在存储过程中或者内联SQL语句中,格式化化输出时间日期类型,而应该按原样返回给应用程序,将格式化工作留给应用程序,这样灵活性更大,更加方便。 对于C# 中格式化日期请参考: 日期与时间格式字符串 标准 DateTime 格式字符串 自定义 DateTime 格式字符串
SQL Server 支持使用科威特算法的阿拉伯样式中的数据格式。
这下就明白112的作用了,同时根据文档可以获取更多你想要的格式了。
CAST 和 CONVERT (Transact-SQL)
将一种数据类型的表达式转换为另一种数据类型的表达式。
Transact-SQL 语法约定
语法
Syntax for CAST:
CAST ( expression AS data_type [ (length ) ])
Syntax for CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
参数
expression
任何有效的表达式。
data_type
目标数据类型。这包括 xml、bigint 和 sql_variant。不能使用别名数据类型。有关可用数据类型的详细信息,请参阅数据类型 (Transact-SQL)。
length
指定目标数据类型长度的可选整数。默认值为 30。
style
指定 CONVERT 函数如何转换 expression 的整数表达式。如果样式为 NULL,则返回 NULL。该范围是由 data_type 确定的。有关详细信息,请参阅“备注”部分。
返回类型
返回转换为 data_type 的 expression。
注释
Date 和 Time 样式
如果 expression 为 date 或 time 数据类型,则 style 可以为下表中显示的值之一。其他值作为 0 进行处理。SQL Server 使用科威特算法来支持阿拉伯样式的日期格式。
例如:
select convert(varchar,getdate(),12)here
12 |
112 |
ISO |
yymmdd yyyymmdd | 输出:100415 --(-04-15)
select convert(varchar,getdate(),101)here
输出:04/15/2010 |