博客
关于我
MSSQL日期格式转换函数(使用CONVERT)
阅读量:791 次
发布时间:2023-02-10

本文共 4610 字,大约阅读时间需要 15 分钟。

SQL Server CONVERT函数日期转换详解

CONVERT函数是SQL Server中一个强大的工具,用于将不同数据类型之间进行转换。特别是在日期时间类型与字符串类型之间转换时,CONVERT函数发挥着重要作用。本文将详细介绍CONVERT函数的日期转换特性,包括参数、样式以及实际应用示例。

CONVERT函数基本结构

CONVERT函数的基本语法如下:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

具体到日期转换场景,常见的使用形式为:

CONVERT(nvarchar(10),字段名,转换格式)

例如:

CONVERT(varchar(10),count_time,121)

数据类型参数说明

  • data_type:目标系统所提供的数据类型,包括 bigintsql_variant。需要注意的是,不能使用用户定义的数据类型。

  • expression:任何有效的Microsoft SQL Server表达式。例如,可以是字段名、函数返回值或直接的字面值。

  • length:对于 ncharnvarcharcharvarcharbinaryvarbinary 数据类型,length 是可选参数,用于指定字符数据的长度。

  • style:日期格式样式,用于将 datetimesmalldatetime 数据转换为字符数据(如 ncharnvarchar 等)或将浮点数、货币等类型转换为字符数据。

  • 日期格式样式说明

    SQL Server支持多种日期格式样式(style),具体如下:

    style 值 描述 示例输出
    0或100 默认格式:mon dd yyyy hh:miAMmon dd yyyy hh:mi:ss:mmmAM 05 16 2006 10:57AM
    1或101 美国格式:mm/dd/yyyy 05/16/2006
    2或102 ANSI格式:yy.mm.dd 06.05.16
    3或103 英国/法国格式:dd/mm/yy 16/05/06
    4或104 德国格式:dd.mm.yy 16.05.2006
    5或105 意大利格式:dd-mm-yy 16-05-2006
    6或106 简化形式:dd mon yy 16 05 2006
    7或107 简化形式:mon dd, yy 05 16, 2006
    8或108 时间格式:hh:mm:ss 10:57:46
    9或109 包含时间的格式:hh:mm:ss:mmmAM 05 16 2006 10:57:46:827AM
    10或110 美国格式(带连字符):mm-dd-yy 05-16-06
    11或111 日本格式:yy/mm/dd 06/05/16
    12或112 ISO标准格式:yymmdd 060516
    13或113 欧洲默认格式:dd mon yyyy hh:mm:ss:mmm(24h) 16 05 2006 10:57:46:937
    14或114 时间格式:hh:mm:ss:mmm(24h) 10:57:46
    20或120 ODBC标准格式:yyyy-mm-dd hh:mm:ss[.fff] 2006-05-16 10:57:47
    21或121 ODBC带毫秒格式:yyyy-mm-dd hh:mm:ss[.fff] 2006-05-16 10:57:47.157
    126 ISO8601格式(无空格):yyyy-mm-dd Thh:mm:ss.mmm 2006-05-16T10:57:49.827
    130或131 Hijri日历格式:dd mon yyyy hh:mi:ss:mmmAMdd/mm/yy hh:mi:ss:mmmAM 18 ???? ?????? 1427 10:57:49:907AM

    注意:默认值(如0或100、9或109、13或113、20或120、21或121)始终返回四位年份(yyyy),而不带世纪数位(yy)时,默认返回两位年份。两位年份的处理会受到截止年份的影响,默认截止年份为2049。例如,49会被解释为2049,而50会被解释为1950。

    实际应用示例

    以下是一些实际应用示例,展示了不同样式下的输出结果:

  • Select CONVERT(varchar(100), GETDATE(), 0)05 16 2006 10:57AM
  • Select CONVERT(varchar(100), GETDATE(), 1)05/16/06
  • Select CONVERT(varchar(100), GETDATE(), 2)06.05.16
  • Select CONVERT(varchar(100), GETDATE(), 3)16/05/06
  • Select CONVERT(varchar(100), GETDATE(), 4)16.05.06
  • Select CONVERT(varchar(100), GETDATE(), 5)16-05-06
  • Select CONVERT(varchar(100), GETDATE(), 6)16 05 06
  • Select CONVERT(varchar(100), GETDATE(), 7)05 16, 06
  • Select CONVERT(varchar(100), GETDATE(), 8)10:57:46
  • Select CONVERT(varchar(100), GETDATE(), 9)05 16 2006 10:57:46:827AM
  • Select CONVERT(varchar(100), GETDATE(), 10)05-16-06
  • Select CONVERT(varchar(100), GETDATE(), 11)06/05/16
  • Select CONVERT(varchar(100), GETDATE(), 12)060516
  • Select CONVERT(varchar(100), GETDATE(), 13)16 05 2006 10:57:46:937
  • Select CONVERT(varchar(100), GETDATE(), 14)10:57:46:967
  • Select CONVERT(varchar(100), GETDATE(), 20)2006-05-16 10:57:47
  • Select CONVERT(varchar(100), GETDATE(), 21)2006-05-16 10:57:47.157
  • Select CONVERT(varchar(100), GETDATE(), 22)05/16/06 10:57:47 AM
  • Select CONVERT(varchar(100), GETDATE(), 23)2006-05-16
  • Select CONVERT(varchar(100), GETDATE(), 24)10:57:47
  • Select CONVERT(varchar(100), GETDATE(), 25)2006-05-16 10:57:47.250
  • Select CONVERT(varchar(100), GETDATE(), 100)05 16 2006 10:57AM
  • Select CONVERT(varchar(100), GETDATE(), 101)05/16/2006
  • Select CONVERT(varchar(100), GETDATE(), 102)2006.05.16
  • Select CONVERT(varchar(100), GETDATE(), 103)16/05/2006
  • Select CONVERT(varchar(100), GETDATE(), 104)16.05.2006
  • Select CONVERT(varchar(100), GETDATE(), 105)16-05-2006
  • Select CONVERT(varchar(100), GETDATE(), 106)16 05 2006
  • Select CONVERT(varchar(100), GETDATE(), 107)05 16, 2006
  • Select CONVERT(varchar(100), GETDATE(), 108)10:57:49
  • Select CONVERT(varchar(100), GETDATE(), 109)05 16 2006 10:57:49:437AM
  • Select CONVERT(varchar(100), GETDATE(), 110)05-16-2006
  • Select CONVERT(varchar(100), GETDATE(), 111)2006/05/16
  • Select CONVERT(varchar(100), GETDATE(), 112)20060516
  • Select CONVERT(varchar(100), GETDATE(), 113)16 05 2006 10:57:49:513
  • Select CONVERT(varchar(100), GETDATE(), 114)10:57:49:547
  • Select CONVERT(varchar(100), GETDATE(), 120)2006-05-16 10:57:49
  • Select CONVERT(varchar(100), GETDATE(), 121)2006-05-16 10:57:49.700
  • Select CONVERT(varchar(100), GETDATE(), 126)2006-05-16T10:57:49.827
  • Select CONVERT(varchar(100), GETDATE(), 130)18 ???? ?????? 1427 10:57:49:907AM
  • Select CONVERT(varchar(100), GETDATE(), 131)18/04/1427 10:57:49:920AM
  • 注意事项

  • 默认截止年份:默认情况下,SQL Server根据截止年份2049解释两位数字的年份。例如,49会被解释为2049,而50会被解释为1950。为了确保日期转换的准确性,建议在转换时指定四位年份。

  • 时间精度:从 smalldatetime 转换为字符数据时,如果包含秒或毫秒,结果中这些位置会显示零。因此,在转换时,可以通过指定适当的字符数据长度来截断不需要的日期部分。

  • Hijri日历:Hijri日历在SQL Server中使用科威特算法进行处理。需要注意的是,Hijri日历的转换格式可能与常见的格里高利日历有所不同,具体输出需要根据转换样式来定。

  • 总结

    CONVERT函数在SQL Server中是一个强大的工具,特别是在日期转换方面表现突出。通过合理选择 style 参数,可以根据不同需求生成所需的日期字符串格式。记住,合理使用默认值和样式参数,可以显著提升日期转换的准确性和可读性。

    转载地址:http://raffk.baihongyu.com/

    你可能感兴趣的文章
    MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
    查看>>
    mysql 查询数据库所有表的字段信息
    查看>>
    【Java基础】什么是面向对象?
    查看>>
    mysql 查询,正数降序排序,负数升序排序
    查看>>
    MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
    查看>>
    mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
    查看>>
    mysql 死锁(先delete 后insert)日志分析
    查看>>
    MySQL 死锁了,怎么办?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 添加列,修改列,删除列
    查看>>
    mysql 添加索引
    查看>>
    MySQL 添加索引,删除索引及其用法
    查看>>
    mysql 状态检查,备份,修复
    查看>>
    MySQL 用 limit 为什么会影响性能?
    查看>>
    MySQL 用 limit 为什么会影响性能?有什么优化方案?
    查看>>
    MySQL 用户权限管理:授权、撤销、密码更新和用户删除(图文解析)
    查看>>
    mysql 用户管理和权限设置
    查看>>
    MySQL 的 varchar 水真的太深了!
    查看>>
    mysql 的GROUP_CONCAT函数的使用(group_by 如何显示分组之前的数据)
    查看>>