您要打印的文件是:使用SQL格式化日期(sqlserver)

使用SQL格式化日期(sqlserver)

作者:佚名    转贴自:http://www.the9web.com/blog/2009/01/10/99/    点击数:162


使用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)
- 0100 (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
- 9109 (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
- 13113 (1, 2) 欧洲默认设置 + 毫秒 dd mon yyyy hh:mi:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20120 (2) ODBC 规范 yyyy-mm-dd hh:mi:ss(24h)
- 21121 (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

  目标数据类型。这包括 xmlbigintsql_variant。不能使用别名数据类型。有关可用数据类型的详细信息,请参阅数据类型 (Transact-SQL)。

  length

  指定目标数据类型长度的可选整数。默认值为 30。

  style

  指定 CONVERT 函数如何转换 expression 的整数表达式。如果样式为 NULL,则返回 NULL。该范围是由 data_type 确定的。有关详细信息,请参阅“备注”部分。

  返回类型

  返回转换为 data_typeexpression

  注释

  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

  
1 101 美国 mm/dd/yyyy
输出:04/15/2010